C# - WPF class 获取所有资源并填充列表框

C# - WPF class get all resources and fill listbox

我有 class 人获得了所有资源名称。这是代码:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;

namespace Helper
{

    public static class callResources
    {

        public static ObservableCollection<string> callAllResources()
        {
            var properties = typeof(Properties.Resources).GetProperties(
      System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
      System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static);

            ObservableCollection<string> col = new ObservableCollection<string>();
            foreach (var propertyInfo in properties)
            {
                var s = propertyInfo.Name;
                if (s != "ResourceManager" && s != "Culture")
                {
                    col.Add(s);
                }
            }
           return col;
        }
    }
}

在MainWindows.cs中有这个代码:

public ObservableCollection<string> resourcesListBox
        {
            get
            {
                return callResources.callAllResources();
            }
        }

如果我调用 resourcesListBox,我在 queryListBox 中只有一行。

在 MainWindow.xaml 中有这个但它不起作用 :

 <ListBox x:Name="queryListBox" HorizontalAlignment="Left" Height="155" Margin="18,10,0,0" SelectionMode="Single" VerticalAlignment="Top" Width="389"  ItemsSource="{Binding Path = resourcesListBox}" SelectionChanged="listBox_SelectionChanged"/>

试试这个方法:

stringList.ForEach(item => listBox1.Items.Add(item))

因此,首先您需要将 class 设置为静态,这样您就可以从后面的代码中调用它而无需创建新实例。

其次,您需要在 callAllResources 方法中 return 类似列表或 ObservableCollection 的内容,并将所有名称放入此列表或 ObservableCollection 中。

然后您可以从后面的代码中调用此方法,它return是资源名称的列表或 ObservableCollection。

呼叫资源class:

public static class callResources
  {

    public static ObservableCollection<string> callAllResources()
    {
      var properties = typeof(Properties.Resources).GetProperties(
System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static);

      ObservableCollection<string> col = new ObservableCollection<string>();
      foreach (var propertyInfo in properties)
      {
        var s = propertyInfo.Name;
        if (s != "ResourceManager" && s != "Culture")
        {

          col.Add(s);

        }
      }
      return col;
    }
  }

隐藏代码:

public ObservableCollection<string> resourcesListBox
{
  get
  {
    return callResources.callAllResources();
  }
}

Xaml代码:

<ListBox x:Name="Listbox1" ItemsSource="{Binding Path=resourcesListBox}"/>