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

Dan*_*ams 22 silverlight conventions caliburn.micro

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

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

Sim*_*Fox 60

Caliburn.Micro已经在支持ItemsControl(例如ComboBox或ListBox)控件的约定中出现,这些控件使您所需的xaml最小化.

首先,您具有标准约定,其中控件内容将绑定到与控件同名的ViewModel属性.在ItemsControl控件内容属性的情况下ItemsControl.ItemsSource.你使用Caliburn.Micro开箱即用的第二个约定是,将尝试绑定ItemsControl.SelectedItem到一个ViewModel属性,该属性具有控件的单一名称,前面带有"Active","Selected"或"Current" (参见ConventionManagerCaliburn.Micro来源).

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

<ComboBox x:Name="Strings"></ComboBox>
Run Code Online (Sandbox Code Playgroud)

并在您的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
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Bas*_*Bas 12

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

  • 这是处理一个事件的大量 XAML。我认为 Caliburn 的重点是使用约定来减少所有这些混乱。 (2认同)