【问题标题】:how to fill in combobox dynamically with caliburn micro?如何使用 caliburn micro 动态填充组合框?
【发布时间】:2014-12-27 15:11:00
【问题描述】:

我是 MVVM 和 Caliburn.Micro 的新手。 我正在尝试使用具有组合框的 Caliburn.Micro 做一个简单的应用程序。 组合框项目是在程序运行时动态添加的,问题是组合框在第一个项目导航后停止更新其内容。

在视图中:

组合框声明如下:

<ComboBox x:Name="cmbProductList" />

在 ViewModel 中:

我为组合框项目声明以下列表:

List<string> L = new List<string> { };

我正在使用以下方法来填充组合框项:

public List<string> cmbProductList
{
    get 
    {
        return L;
    }
    set
    {
        L = value;
        NotifyOfPropertyChange("cmbProductList");
    }
}

这个命令添加一个项目到这个列表:

L.Add(p1.ID.ToString());

【问题讨论】:

    标签: caliburn.micro


    【解决方案1】:

    您用于组合框项目的容器不是正确的。 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>();
    

    其余的可以保持不变。

    【讨论】:

    • 感谢 dchaid 先生的回答。知道:初始化中的var代码不起作用,我使用:“BindableCollection _cmbProductList = new BindableCollection();”而是。
    • 确实,我对支持字段的名称感到困惑,我已经编辑了我的答案。
    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多