WPF:选中一个复选框时取消选择我的所有复选框

WPF: Deselect all my Checkbox when one is selected

这是我的第一个 ListView row column 包含 CheckBox:

<GridViewColumn Width="40" >
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox Name="cbSelectInterface" IsThreeState="False" ></CheckBox>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

我如何添加选项以仅检查特定 Row 中的一个 CheckBox 而我选择另一个 CheckBox 并检查此控件所有其他 CheckBox 变为非已选择?

如何将 CheckBox 的 IsChecked 属性 绑定到 ListViewItem 的 IsSelected 属性?如果 SelectionMode 设置为 Single,那么您将只能 select 一行和一个复选框。

<ListView ItemsSource="{Binding Source={StaticResource TestDataSource}}"
          SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="30">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding IsSelected,
                                              RelativeSource={RelativeSource
                                              AncestorType={x:Type ListViewItem}}}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn DisplayMemberBinding="{Binding}" />
        </GridView>
    </ListView.View>
</ListView>

然后您可以使用 ListView 的 SelectedItem 来了解哪一行是带有选中复选框的行。

在 WPF 中,没有自动执行您想要的操作的控件。但是,如果您按照 WPF 应用程序中的习惯使用数据绑定,那么实现您的要求很简单,或者至少会很简单。在这种情况下,您的视图模型或隐藏代码将有一个包含所有数据项的对象(即绑定到 ListView.ItemsSource 属性 的数据)。

Checkbox 中的一个被选中时,您需要做的就是遍历数据绑定集合中的每个项目,并将它们的数据绑定到 Checkbox 的属性设置为 false:

foreach (var item in YourDataBoundCollection)
{
    item.PropertyDataBoundToCheckBox = false;
}

如果您已经按照应有的方式在数据 class 上实现了 INotifyPropertyChanged 接口,那么 UI 将自动更新。

剩下的唯一问题是您如何知道 CheckBox 何时被检查?最简单的 'non MVVM' 方法是为 CheckBox.Checked Event.

添加处理程序