0

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

<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触发的 CheckBox 的属性和行号?如何将数据从我的视图传递到我的视图模型?CheckBoxChangedCheckBoxChanged

4

1 回答 1

1

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

首先,您可能应该将 Checkboxes 的 IsChecked 属性绑定到视图模型上的属性。

其次,根据您关于需要知道已选中复选框的行号的评论,我想说您可能需要通过数据绑定生成包括 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,因此您可能需要执行一些其他类型的查找以使其找到它 - 这个示例只是为了简单起见

于 2012-06-15T18:32:50.083 回答