Как захватить выделение в выпадающем списке Caliburn Micro? - PullRequest
21 голосов
/ 30 апреля 2011

Я только начинаю с Caliburn Micro.Я хочу иметь комбинированное окно со списком строк, и когда пользователь выбирает элемент, я хочу вызвать некоторый метод уведомления.Это должно быть просто, верно?Я нетерпелив, и 5 минут Googling не решили его для меня, так что Stackers на помощь!

Примечание: я предпочитаю ответ, который показывает мне, как вставить это в модель представления.Избегание сложного XAML - это весь смысл инфраструктуры MVVM, ИМХО.

Ответы [ 2 ]

59 голосов
/ 02 мая 2011

Caliburn.Micro выпекла в соглашениях, поддерживающих ItemsControl (например, ComboBox или ListBox) элементы управления, которые делают требуемый xaml в вас View минимальным.

Во-первых, у вас есть стандартное соглашение, в котором содержимое элементов управления будет связано со свойством ViewModel с тем же именем, что и элемент управления. В случае ItemsControl свойство содержимого элемента управления имеет значение ItemsControl.ItemsSource. И второе соглашение, которое вы получаете из коробки с Caliburn.Micro, заключается в том, что будет сделана попытка связать ItemsControl.SelectedItem со свойством ViewModel, которое имеет сингулярное имя элемента управления, с «Active», «Selected» или « Ток "добавлен (см. ConventionManager в источнике Caliburn.Micro).

Имея это в виду, вы можете достичь желаемого с помощью следующих элементов в вашем представлении:

<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. Второе соглашение сначала объединяет «Strings» в «String» и добавляет «Selected» для получения свойства «SelectedString» для привязки ComboBox.SelectedItem к.

12 голосов
/ 30 апреля 2011
<ListBox x:Name="Items" ItemsSource="{Binding Path=Items}" cal:Message.Attach="[Event SelectionChanged]=[Action SelectedItemChanged($this.SelectedItem)]">
...