我的视图模型类非常简单。
class Presenter
{
public IEnumerable<String> JustFake => new List<String> { "aaa", "bbb" };
public Presenter() { }
}
在XAML中,我添加了一个绑定到属性的组合框,如下所示。
<Window.DataContext>
<local:Presenter/>
</Window.DataContext>
...
<ComboBox x:Name="comboBox"
ItemsSource="{Binding JustFake}"/>
但是,尽管intellisense找到 JustFake ,但这些值不会出现在组合框中。它是空的。我已经尝试过实现 INotify ... 等,但没有什么能给我带来任何不同。我无法真正说出我可以错过的东西。我应该继承其他东西(我看到了blog where they mentioned BindableBase ,无论该类是什么类型的)?我应该以另一种方式介绍 Presenter 吗?
答案 0 :(得分:1)
public IEnumerable<String> JustFake = new List<String> { "aaa", "bbb" };
声明一个不能绑定的公共字段。您需要属性:
public IEnumerable<String> JustFake { get; set;}
public Presenter()
{
JustFake = new List<String> { "aaa", "bbb" };
}
如果要在构造函数之后设置属性,则需要使用INotifyPropertyChanged
,如果要修改集合,请确保使用ObservableCollection
而不是{{1} },因为它实现了List
。
更新:您显然使用的是C#6表达式成员,因此您可以在这方面做得很好。
更新2 :从您报告的例外情况来看,您的INotifyCollectionChanged
未设置或稍后设置为DataContext
。检查并确保没有任何内容覆盖它。
答案 1 :(得分:0)
绑定到ItemSource
上的ItemsControl
,例如ListBox
或DataGrid
需要公共财产:
class Presenter
{
public List<string> JustFake { get; set; }
public Presenter()
{
JustFake = new List<string> { "aaa", "bbb" };
}
}
要支持返回UI的通知,该集合需要INotifyPropertyChanged
实现,它通常更容易使用或派生自已实现它的集合类。 ObservableCollection<T>
:
class Presenter
{
public ObservableCollection<string> JustFake { get; set; }
public Presenter()
{
JustFake = new ObservableCollection<string> { "aaa", "bbb" };
}
}