【问题标题】:WPF: Deselect all my Checkbox when one is selectedWPF:选中一个复选框时取消选中我的所有复选框
【发布时间】:2015-08-25 16:21:11
【问题描述】:

这是我第一个包含CheckBoxListView row column

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

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

【问题讨论】:

  • 您每行有多个 CheckBox,并且您想每行选择一个 Check?或者您每行有一个 CheckBox 并希望在所有行中都有一个 CheckBox?
  • 只需设置单选按钮的样式,使其看起来像复选框
  • 我每行有一个 CheckBox。
  • @Theodosius Von Richthofen:与 RadioButton 这种行为相同,我仍然可以检查几个 RadioButtons
  • 如何将 CheckBox 的 IsChecked 属性绑定到 ListViewItem 的 IsSelected 属性?如果 SelectionMode 设置为 Single,那么您将只能选择一行和一个复选框。

标签: wpf listview checkbox


【解决方案1】:

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

<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 来知道哪一行是选中 CheckBox 的那一行。

【讨论】:

  • TestDataSource 无法解析,所以我留下了 dataList,它工作正常,有什么区别?
  • 哦,这只是我用于测试的源,不需要它......你可以使用任何你想要的 ItemsSource。
【解决方案2】:

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

当检查Checkbox es中的一个时,您需要做的只是通过数据绑定集合中的每个项目迭代,并将其属性设置为绑定到Checkboxfalse: p >

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

如果您在数据类上实现了应有的INotifyPropertyChanged 接口,那么 UI 将自动更新。

剩下的唯一问题是您如何知道CheckBox 何时被检查?最简单的“非 MVVM”方法是为 CheckBox.Checked Event 添加处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 2018-04-15
    • 2021-12-23
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多