我的窗口类中有一个可观察的集合,我希望能够绑定到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);
}
}
答案 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
窗口来检测绑定中的错误。