您好我有一个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);
}
答案 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>