wpf datagrid复选框列

时间:2015-10-14 18:49:45

标签: wpf xaml checkbox binding datagrid

您好我有一个WPF应用程序,带有可观察对象集合的WPF数据网格。可观察集合中的每个对象都有一个布尔变量,由数据网格中的复选框表示。我要做的是做到这一点,当我检查框并使其成为" true"对于集合的一个对象,它使集合的其他对象设置为" false"。换句话说,当我单击一个对象的数据网格复选框时,它会取消选中集合中其他对象的复选框。它有这么简单的概念,但我已经尝试了几种方法来做到这一点,包括使用属性,但我得到堆栈溢出因为它一直在循环收集整个集合,我尝试使用与点击复选框相关的事件,但我不能获取事件以使数据网格中的所有其他对象都设置为false,因为我无法弄清楚如何访问数据网格中的项目来修改它们。必须有一种非常简单的方法来做到这一点,我忽略了。

这里的WPF代码:

<DataGrid x:Name="DataGrid1" AutoGenerateColumns="False"     ItemsSource="{Binding CollectionOfThings}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" Margin="0,0,0,124">

<DataGrid.Columns>
    <DataGridCheckBoxColumn Header="Column with a checkbox" Binding= "{Binding CheckBoxBooleanValue}" />

</DataGrid.Columns>

我有c#代码:

该集合包含来自这个简单类的对象:

public class Thing
{
public bool CheckBoxBooleanValue {get; set;}
}

我的WPF表单中的主要Window构造函数在应用程序启动时创建集合:

public MainWindow()
{
ObservableCollection<Thing> CollectionOfThings;
Thing thing1 = new Thing();
CollectionOfThings.Add(thing1);
Thing thing2 = new Thing();
CollectionOfThings.Add(thing2);
}

1 个答案:

答案 0 :(得分:1)

基本上你需要一个单选按钮功能。如果您有相同组的单选按钮,那么当您将其设置为true时,其他按钮将设置为false。遗憾的是,您无法以直接的方式在数据网格中添加单选按钮列。一个小技巧将为你完成工作,我正在为此粘贴代码。

注意:当我将组名设置为“myGroup”时,这可确保所有单选按钮都遵循相同的组并满足您所需的功能。

 <DataGrid Name="data" AutoGenerateColumns="False"  
              ItemsSource="{Binding CollectionOfThings}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" Margin="0,0,0,124">

        <DataGrid.Columns>
            <DataGridTemplateColumn  >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton IsChecked= "{Binding CheckBoxBooleanValue}" GroupName="myGroup" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>