C# Datagrid复选框选择和取消选择
我有一个包含两条记录的数据网格。这个网格非常简单,因为它只有四列。网格的最后两列分别为选项1和选项2。现在我有一个问题,如果是从选项1列中选择行的复选框,然后如果我要在同一行中选择选项2,那么从该行中选择的选项1应该被取消选择。我也尝试了单选按钮,但它不工作,因为它检查或取消检查了整行。我想要的是在同一行进行操作 谢谢 代码-C# Datagrid复选框选择和取消选择,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个包含两条记录的数据网格。这个网格非常简单,因为它只有四列。网格的最后两列分别为选项1和选项2。现在我有一个问题,如果是从选项1列中选择行的复选框,然后如果我要在同一行中选择选项2,那么从该行中选择的选项1应该被取消选择。我也尝试了单选按钮,但它不工作,因为它检查或取消检查了整行。我想要的是在同一行进行操作 谢谢 代码- private observedcollection\u empList; 公共主窗口() { 初始化组件(); BindEmpDetails(); } 私有voi
private observedcollection\u empList;
公共主窗口()
{
初始化组件();
BindEmpDetails();
}
私有void BindEmpDetails()
{
_empList=新的ObservableCollection()
{
新的Emp(){Id=1,Name=“XYZ”},
new Emp(){Id=1,Name=“ABC”},
};
dgEmp.ItemsSource=_empList;
}
}
公共级电磁脉冲
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共布尔工作{get;set;}
公共布尔失效{get;set;}
}
我会怎么做(Emp应该实现InotifyPropertyChanged):
另外,添加此绑定:
<CheckBox x:Name="ch1" Checked="{Binding Retired}"></CheckBox>
再加上一份工作
我很确定还有另一种聪明的方法,但这是我的想法。我会怎么做(Emp应该实现InotifyPropertyChanged):
另外,添加此绑定:
<CheckBox x:Name="ch1" Checked="{Binding Retired}"></CheckBox>
再加上一份工作
我很确定还有另一种聪明的方法,但这是我的想法。这似乎是单选按钮的最佳选择,就像你以前尝试过的那样。如果给两个单选按钮提供相同的组名,则无论它们在窗口中的位置如何,它们都应该是互斥的。这样,用户只能选择“工作”或“退休”
这似乎是单选按钮的最佳选择,就像您以前尝试过的那样。如果给两个单选按钮提供相同的组名,则无论它们在窗口中的位置如何,它们都应该是互斥的。这样,用户只能选择“工作”或“退休”
@H.B.感谢mate提供了更多的过滤器,以便尽早解决问题。为清楚起见,这个问题暗示,工作和退休都可能是错误的。这是否会排除单选按钮选项(除非您专门处理它,以便能够同时取消选择这两个选项)?还是我读得太多了?@H.B.感谢mate提供了更多的过滤器,以便问题能够尽早得到解决。为了清楚起见,这个问题暗示,工作和退休都可能是错误的。这是否会排除单选按钮选项(除非您专门处理它,以便能够同时取消选择这两个选项)?还是我读得太多了?我喜欢这种方法。它看起来确实应该由viewmodel中的业务逻辑来处理,而不是视图本身。然而,我喜欢下面的解决方案,它在这种情况下使用了更好的逻辑(带有groupProperty的radiobutton):-)我喜欢这种方法。它看起来确实应该由viewmodel中的业务逻辑来处理,而不是视图本身。不过,我喜欢下面的解决方案,它在这种情况下使用了更好的逻辑(带有groupProperty的radiobutton):-)
public class Emp : INotifyPropertyChanged
{
public int Id { get; set; }
public string Name { get; set; }
public bool Working
{
get { return working_; }
set
{
if (working_ != value)
{
working_ = value;
retired_ = !working_;
OnPropertyChanged("Retired");
OnPropertyChanged("Working");
}
}
}
public bool Retired
{
get { return retired_; }
set
{
if (retired_ != value)
{
retired_ = value;
working_ = !retired_;
OnPropertyChanged("Retired");
OnPropertyChanged("Working");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private bool retired_;
private bool working_;
public void OnPropertyChanged(string PropertyName) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
}
<CheckBox x:Name="ch1" Checked="{Binding Retired}"></CheckBox>
<RadioButton GroupName="IsWorking" Content="Working" />
<RadioButton GroupName="IsWorking" Content="Retired" />