将列表框绑定到可观察的集合 - 耗尽了想法

时间:2013-11-18 16:06:31

标签: c# .net wpf

我的窗口类中有一个可观察的集合,我希望能够绑定到xaml中的listview。我现在一直在谷歌搜索一个半小时的最佳时间,而我似乎只能想出一个回答是“哇,为什么它必须如此精神?”

如果有人能够对此有所了解,我会非常感激,我的收藏称为“TestItems”,测试项目有两个变量 - “name”和“type” - 两个字符串。

我想在我的可观察集合中显示TestItems的所有“名称”属性......

任何帮助表示感谢,我甚至设法在几分钟内用C ++和Qt模拟了这一点,但现在似乎在C#中躲过了我。

当前的xaml:

<ListBox Name="ItemsOfData" 
     ItemsSource="{Binding TestItems}" 
     DisplayMemberPath="name" 
     IsSynchronizedWithCurrentItem="True">
</ListBox>

当前的C#代码:

public ObservableCollection<TestItem> TestItems = new ObservableCollection<TestItem>();

public partial class MainWindow : Window
{
    public ObservableCollection<TestItem> TestItems = new ObservableCollection<TestItem>();

    public MainWindow()
    {
        InitializeComponent();

        this.DataContext = this.ItemsOfData;

        TestItem test = new TestItem("name", "type");

        this.TestItems.Add(test);
    }
}

3 个答案:

答案 0 :(得分:2)

只能绑定到公共财产
需要得到一个公共财产
并且需要修复DataContext

public partial class MainWindow : Window
{
    private ObservableCollection<TestItem> testItems = new ObservableCollection<TestItem>();
    public ObservableCollection<TestItem> TestItems { get { return  testItems ; }

    public MainWindow()
    {
        InitializeComponent();   
        this.DataContext = this;    
        TestItem test = new TestItem("name", "type");    
        this.testItems.Add(test);
    }
}

答案 1 :(得分:1)

这很简单。只要您在视图模型或后面的代码中拥有您的集合,就可以在该集合中添加项目:

   private ObservableCollection<TestItem> _TestItems;
   public ObservableCollection<TestItem> TestItems
   {
   get { return _TestItems;}
   set 
       { 
          _TestItems = value;
          OnPropertyChanged("TestItems");
       }
}

如果您正在使用viewmodel,那么您需要将窗口代码的构造函数中的datacontext设置为:

 //substitute with whatever your viewmodel class name is
DataContext = new ViewModel() 

在你的xaml中这样:

<ListBox ItemsSource="{Binding TestItems}"/>

答案 2 :(得分:0)

替换它:

this.DataContext = this.ItemsOfData;

到此:

this.DataContext = this;

您设置了错误的上下文。您可以使用Output窗口来检测绑定中的错误。