在 WPF 中调用命令时从复选框获取选中属性

本文关键字:复选框 获取 属性 WPF 调用 命令 | 更新日期: 2023-09-27 18:37:25

我在 WPF C# 项目中有一个复选框网格。每个复选框的 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}" />

每次选中或取消选中其中一个复选框时,我都会调用CheckBoxChanged。我将如何显示 1 的弹出窗口。复选框网格中的行号和复选框的名称(例如"CheckBox0")和 2。复选框的已检查值(真/假)?

我的 CheckBoxChangedCommand,在 WViewModel.cs 文件中,看起来像这样:

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

如何访问从CheckBoxChanged中触发CheckBoxChanged的复选框的 IsChecked 属性和行号?如何将数据从我的视图传递到我的视图模型?

在 WPF 中调用命令时从复选框获取选中属性

您肯定需要在此处对绑定做更多操作。

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

其次,根据您关于需要知道选中的复选框的行号的评论,我认为您可能需要通过数据绑定生成包含复选框的"行",以便您可以将表示行的对象作为命令参数传递给您的 CheckBoxChangedCommand。

所以像这样:

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

然后在您的资源中:

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

注意:您的CheckChangedCommand可能在主ViewModel上,而不是在项目级ViewModel上,因此您可能需要执行一些其他类型的查找才能找到它 - 此示例只是为了简单起见