如何在Caliburn Micro中捕获组合框选择?

时间:2011-04-29 20:57:55

标签: silverlight conventions caliburn.micro

我刚开始使用Caliburn Micro。我想要一个带有字符串列表的组合框,当用户选择一个项目时,我希望有一个名为的notify方法。应该很简单吧?我很不耐烦,5分钟的谷歌搜索还没有为我解决,所以Stackers要救了!

注意:我赞成一个答案,告诉我如何将其放入视图模型中。避免复杂的XAML是MVVM框架的重点,恕我直言。

2 个答案:

答案 0 :(得分:59)

Caliburn.Micro已经在支持ItemsControl(例如ComboBox或ListBox)控件的约定中出现,这些控件在您的View中生成所需的xaml。

首先,您有标准约定,其中控件内容将绑定到与控件同名的ViewModel属性。在ItemsControl的情况下,控件内容属性为ItemsControl.ItemsSource。你使用Caliburn.Micro开箱即用的第二个约定是尝试将ItemsControl.SelectedItem绑定到一个ViewModel属性,该属性具有控件的单一名称,具有“Active”,“Selected”或“当前”前置(请参阅Caliburn.Micro源中的ConventionManager)。

请注意,您可以在视图中使用以下内容实现所需:

<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
    }
}

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

答案 1 :(得分:12)

<ListBox x:Name="Items" ItemsSource="{Binding Path=Items}" cal:Message.Attach="[Event SelectionChanged]=[Action SelectedItemChanged($this.SelectedItem)]">