Подтвердить что ты не робот

Как захватить выбор combobox в Caliburn Micro?

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

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

4b9b3361

Ответ 1

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

Сначала у вас есть стандартное соглашение, в котором содержимое элементов управления будет привязано к свойству ViewModel с тем же именем, что и элемент управления. В случае ItemsControl свойство содержимого элементов управления ItemsControl.ItemsSource. И второе соглашение, которое вы получаете из коробки с Caliburn.Micro, заключается в том, что будет предпринята попытка привязать ItemsControl.SelectedItem к свойству ViewModel, которое имеет одноименное имя элемента управления, либо с помощью "Активный", "Выбранный", Current "(см. 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
    }
}

Первое соглашение подбирает имя элемента управления ( "Строки" ) и привязывает ComboBox.ItemsSource к свойству ViewModel Strings. Второе соглашение сначала объединяет "Строки" в "String" и добавляет "Selected", чтобы получить свойство "SelectedString" для привязки ComboBox.SelectedItem к.

Ответ 2

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