在WPF中调用Command时从CheckBox获取Checked属性

时间:2012-06-15 18:11:57

标签: c# wpf xaml

我在WPF C#项目中有一个CheckBoxes网格。每个CheckBox的Command属性都绑定到我的WView.xaml文件中的CheckBoxChangedCommand,如下所示:

<CheckBox Grid.Row="0" IsChecked="true" x:Name ="CheckBox0" 
          Command="{Binding CheckBoxChangedCommand}" />
<CheckBox Grid.Row="1" IsChecked="true" x:Name="CheckBox1" 
          Command="{Binding CheckBoxChangedCommand}" />

每次选中或取消选中其中一个CheckBox时,我都会调用CheckBoxChanged。我将如何显示一个弹出窗口,其中显示1. CheckBox网格中的行号和CheckBox的名称(例如“CheckBox0”)和2. Checked值(true / false)复选框?

我的CheckBoxChangedCommand,在WViewModel.cs文件中,如下所示:

public ICommand CheckBoxChangedCommand
{
    get
    {
        return new RelayCommand(param =>
        {
            MessageBox.Show("CheckBoxChanged!"); 
        });
    }
}

如何从IsChecked内访问CheckBoxChanged属性以及触发CheckBoxChanged的CheckBox的行号?如何将数据从View传递到ViewModel?

1 个答案:

答案 0 :(得分:1)

你肯定需要在这里做更多的绑定。

首先,您应该将Checkbox的IsChecked属性绑定到viewmodel上的属性。

其次,根据您对需要知道已选中复选框的行号的注释,我会说您可能需要通过数据绑定生成包含CheckBox的“行”,以便您可以通过将行表示为CheckBoxChangedCommand的CommandParameter的对象。

类似于:

<ListBox ItemsSource="{Binding MyItems}" />

然后在您的资源中:

<DataTemplate DataType="{x:Type local:MyItemType}">
    <CheckBox IsChecked="{Binding IsChecked}" 
              Command="{Binding CheckChangedCommand}" 
              CommandParameter="{Binding}" />
</DataTemplate>

注意:你的CheckChangedCommand可能在主ViewModel上,而不是项目级ViewModel,所以你可能需要做一些其他类型的查找才能找到它 - 这个例子只是为了简单起见