属性 添加到视图模型不会向组合框生成项目
Property added to view model doesn't produce items to a combo box
我的视图模型class非常简单。
class Presenter
{
public IEnumerable<String> JustFake => new List<String> { "aaa", "bbb" };
public Presenter() { }
}
IN XAML 我添加了一个绑定到 属性 的组合框,如下所示。
<Window.DataContext>
<local:Presenter/>
</Window.DataContext>
...
<ComboBox x:Name="comboBox"
ItemsSource="{Binding JustFake}"/>
然而,尽管智能感知发现 JustFake,但组合框中没有显示这些值。它是空的。我试过实施 INotify... 等,但没有任何区别。我真的不知道我会错过什么。我应该继承其他东西吗(我看到 blog where they mentioned BindableBase,无论 class 可能是什么)?我应该用另一种方式介绍 Presenter 吗?
绑定到 ItemsControl
上的 ItemSource
,例如 ListBox
或 DataGrid
需要 public 属性:
class Presenter
{
public List<string> JustFake { get; set; }
public Presenter()
{
JustFake = new List<string> { "aaa", "bbb" };
}
}
为了支持返回 UI 的通知,该集合需要一个 INotifyPropertyChanged
实现,通常更容易使用或从已经实现它的集合 class 派生。 ObservableCollection<T>
:
class Presenter
{
public ObservableCollection<string> JustFake { get; set; }
public Presenter()
{
JustFake = new ObservableCollection<string> { "aaa", "bbb" };
}
}
public IEnumerable<String> JustFake = new List<String> { "aaa", "bbb" };
声明一个public 字段,它不能被绑定。你需要一个 属性:
public IEnumerable<String> JustFake { get; set;}
public Presenter()
{
JustFake = new List<String> { "aaa", "bbb" };
}
如果要在构造函数后设置属性,则需要使用INotifyPropertyChanged
,如果要修改集合,请务必使用ObservableCollection
而不是 List
,因为它实现了 INotifyCollectionChanged
.
更新:您显然使用了 C# 6 表达式成员,所以您在这方面可能没问题。
更新 2:从您报告的异常来看,您的 DataContext
似乎未设置,或者稍后设置为 this
。检查并确保没有任何东西覆盖它。
我的视图模型class非常简单。
class Presenter
{
public IEnumerable<String> JustFake => new List<String> { "aaa", "bbb" };
public Presenter() { }
}
IN XAML 我添加了一个绑定到 属性 的组合框,如下所示。
<Window.DataContext>
<local:Presenter/>
</Window.DataContext>
...
<ComboBox x:Name="comboBox"
ItemsSource="{Binding JustFake}"/>
然而,尽管智能感知发现 JustFake,但组合框中没有显示这些值。它是空的。我试过实施 INotify... 等,但没有任何区别。我真的不知道我会错过什么。我应该继承其他东西吗(我看到 blog where they mentioned BindableBase,无论 class 可能是什么)?我应该用另一种方式介绍 Presenter 吗?
绑定到 ItemsControl
上的 ItemSource
,例如 ListBox
或 DataGrid
需要 public 属性:
class Presenter
{
public List<string> JustFake { get; set; }
public Presenter()
{
JustFake = new List<string> { "aaa", "bbb" };
}
}
为了支持返回 UI 的通知,该集合需要一个 INotifyPropertyChanged
实现,通常更容易使用或从已经实现它的集合 class 派生。 ObservableCollection<T>
:
class Presenter
{
public ObservableCollection<string> JustFake { get; set; }
public Presenter()
{
JustFake = new ObservableCollection<string> { "aaa", "bbb" };
}
}
public IEnumerable<String> JustFake = new List<String> { "aaa", "bbb" };
声明一个public 字段,它不能被绑定。你需要一个 属性:
public IEnumerable<String> JustFake { get; set;}
public Presenter()
{
JustFake = new List<String> { "aaa", "bbb" };
}
如果要在构造函数后设置属性,则需要使用INotifyPropertyChanged
,如果要修改集合,请务必使用ObservableCollection
而不是 List
,因为它实现了 INotifyCollectionChanged
.
更新:您显然使用了 C# 6 表达式成员,所以您在这方面可能没问题。
更新 2:从您报告的异常来看,您的 DataContext
似乎未设置,或者稍后设置为 this
。检查并确保没有任何东西覆盖它。