如何使用MVVM模式在单选按钮更改上添加事件?

时间:2018-06-26 12:23:07

标签: c# wpf xaml mvvm

我正在尝试制作动态单选按钮,我想在单选按钮更改事件中显示一个带有所选项目的消息框。我不太了解如何使用MVVM模式创建新的事件处理程序,也无法使用PropertyChangedEventHandler

这是我的代码

XAML

<StackPanel Grid.Row="2">
    <TextBlock Text="Select a Salad"
                       FontSize="18"
                        Margin="5" />
    <ItemsControl ItemsSource="{Binding Salads}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <RadioButton GroupName="Salads"
                            Content="{Binding ItemDescription}"
                            IsChecked="{Binding IsSelected}"
                            Margin="5,1"/>
            </DataTemplate>

        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

查看模型

public class MainWindowViewModel : INotifyPropertyChanged
{
    public MainWindowViewModel()
    {
        Salads = new Collection<SelectableItem>
                {
                    new SelectableItem { ItemDescription = "Kale Avocado", Id = 1},
                    new SelectableItem { ItemDescription = "Caesar", Id = 2 },
                    new SelectableItem { ItemDescription = "Arugula with Goat Cheese", Id = 3, IsSelected = true},
                    new SelectableItem { ItemDescription = "Garden", Id = 4}
                };
    }

    // Salads
    public Collection<SelectableItem> Salads { get; set; }

    public SelectableItem SelectedSalad
    {
        get { return Salads.FirstOrDefault(s => s.IsSelected); }
    }

    // Property Changed
    public event PropertyChangedEventHandler PropertyChanged;
}

SelectableItem类

public class SelectableItem : INotifyPropertyChanged
{
    public string ItemDescription { get; set; }

    public bool IsSelected { get; set; }

    public int Id { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}

2 个答案:

答案 0 :(得分:1)

您通常使用命令来处理MVVM应用程序中的事件。请参阅this博客文章,以获取有关此信息的更多信息。

一旦您向显示SelectableItem的{​​{1}}类添加了命令,就可以将MessageBox的{​​{1}}属性绑定到该源属性:

Command

当您选中或取消选中RadioButton时,将调用该命令。

答案 1 :(得分:0)

PropertyChanged可以这样使用

PropertyChanged += delegate(string propertyName)
{
    if(propertyName == "IsSelected")
    {
        // Do something
    }
};