Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datagrid复选框选择和取消选择_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# Datagrid复选框选择和取消选择

C# Datagrid复选框选择和取消选择,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个包含两条记录的数据网格。这个网格非常简单,因为它只有四列。网格的最后两列分别为选项1和选项2。现在我有一个问题,如果是从选项1列中选择行的复选框,然后如果我要在同一行中选择选项2,那么从该行中选择的选项1应该被取消选择。我也尝试了单选按钮,但它不工作,因为它检查或取消检查了整行。我想要的是在同一行进行操作 谢谢 代码- private observedcollection\u empList; 公共主窗口() { 初始化组件(); BindEmpDetails(); } 私有voi

我有一个包含两条记录的数据网格。这个网格非常简单,因为它只有四列。网格的最后两列分别为选项1和选项2。现在我有一个问题,如果是从选项1列中选择行的复选框,然后如果我要在同一行中选择选项2,那么从该行中选择的选项1应该被取消选择。我也尝试了单选按钮,但它不工作,因为它检查或取消检查了整行。我想要的是在同一行进行操作

谢谢

代码-


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" />