如何使用caliburn micro动态填充组合框?

时间:2014-12-27 15:11:01

标签: caliburn.micro

我是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());

1 个答案:

答案 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>();

其余的可以保持不变。