我只是从Caliburn Micro开始。我想要一个带有字符串列表的组合框,当用户选择一个项目时,我想调用一些notify方法。应该很简单,对吧?我很不耐烦,并且谷歌搜索的5分钟还没有为我解决,所以请堆叠器进行救援!

注意:我喜欢一个答案,该答案向我展示了如何将其放入 View 模型。避免使用复杂的XAML是MVVM框架IMHO的重点。

最佳答案

Caliburn.Micro已支持基于ItemsControl的约定(例如ComboBox或ListBox),这些控件使View中所需的xaml最小化。

首先,您具有标准约定,其中控件内容将绑定(bind)到与控件名称相同的ViewModel属性。对于ItemsControl,控件的content属性为ItemsControl.ItemsSource。使用Caliburn.Micro开箱即用的第二个约定是,将尝试将ItemsControl.SelectedItem绑定(bind)到ViewModel属性,该属性具有控件的单数名称,使用“ Activity ”,“选定”或“当前”前置(请参见Caliburn.Micro源代码中的ConventionManager)。

考虑到这一点,您可以在 View 中实现以下目标:

<ComboBox x:Name="Strings"></ComboBox>

并在您的ViewModel中:
public BindableCollection<string> Strings
{
    get
    {
        // silly example of the collection to bind to
        return new BindableCollection<string>(
                         new string[]{ "one", "two", "three"});
    }
}

private string _selectedString;
public string SelectedString
{
    get { return _selectedString; }
    set
    {
        _selectedString= value;
        NotifyOfPropertyChange(() => SelectedString);
        // and do anything else required on selection changed
    }
}

第一个约定选择控件名称(“字符串”),并将ComboBox.ItemsSource绑定(bind)到ViewModel属性Strings。第二种约定首先将“字符串”单数化为“字符串”,并在“Selected”前添加属性“SelectedString”以将ComboBox.SelectedItem绑定(bind)到该字符串。

关于silverlight - 如何在Caliburn Micro中捕获组合框选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5837343/

10-13 03:54