我是MVVM和Caliburn.Micro的新手。 我正在尝试使用具有组合框的Caliburn.Micro进行简单的应用程序。 组合框项目在程序运行时动态添加,问题是组合框在第一个项目导航后停止更新其内容。
在视图中
组合框声明如下:
<ComboBox x:Name="cmbProductList" />
在ViewModel中:
我为combobox项目声明了以下列表:
List<string> L = new List<string> { };
我使用以下方法填充组合框项目:
public List<string> cmbProductList
{
get
{
return L;
}
set
{
L = value;
NotifyOfPropertyChange("cmbProductList");
}
}
此命令将一个项目添加到此列表中:
L.Add(p1.ID.ToString());
答案 0 :(得分:2)
您用于组合框项目的容器不合适。 List
无法通知UI其更改(添加或删除的项目)。相反,您需要使用ObservableCollection
。或者甚至更好,您可以使用BindableCollection
这是Caliburn.Micro的自定义版ObservableCollection
:
BindableCollection是一个继承自ObservableCollection的简单集合,但它也确保在UI线程上引发其所有事件。
http://caliburnmicro.com/documentation/introduction
您的财产将如下所示:
private BindableCollection<string> _cmbProductList;
public BindableCollection<string> cmbProductList
{
get
{
return _cmbProductList;
}
set
{
_cmbProductList = value;
NotifyOfPropertyChange("cmbProductList");
}
}
当然它的初始化看起来像这样:
_cmbProductList = new BindableCollection<string>();
其余的可以保持不变。