c# - Datagrid-复选框选择和取消选择

标签 c# wpf xaml datagrid

我有一个包含几条记录的数据网格。网格非常简单,因为它只有四列。网格的最后两列分别是 Option1 和 Option2。现在我在这里遇到一个问题,如果是从 Option1 列中选择行的复选框,然后如果我要在同一行上选择 Option2,那么应该取消选择从该行中选择的 Option1。我也尝试使用单选按钮,但它不起作用,因为它选中或取消选中了整行。我希望操作应该发生在同一行。

谢谢

代码-

<Window x:Class="Convertor.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
    Title="MainWindow" Height="350" Width="525">

<Grid>
    <DataGrid x:Name="dgEmp" CanUserAddRows="False" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Id" Binding="{Binding Path=Id}" Width="*"></DataGridTextColumn>
            <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="*"></DataGridTextColumn>
            <DataGridTemplateColumn Header="Option1" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox x:Name="ch1"></CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Option2" Width="*">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox x:Name="ch2" ></CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

</Grid>

 private ObservableCollection<Emp> _empList;
    public MainWindow()
    {
        InitializeComponent();
        BindEmpDetails();
    }

    private void BindEmpDetails()
    {
        _empList = new ObservableCollection<Emp>()
        {
            new Emp(){Id=1,Name="XYZ"},
            new Emp(){Id=1,Name="ABC"},
        };
        dgEmp.ItemsSource = _empList;
    }
}

public class Emp
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Working { get; set; }
    public bool Retired { get; set; }
}

最佳答案

我会做什么(Emp 应该实现 INotifyProperyChanged):

 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));
    }
}

加上这个绑定(bind):

<CheckBox x:Name="ch1" Checked="{Binding Retired}"></CheckBox>

加一个用于工作。

很确定还有另一种聪明的方法,但这个在我的脑海中。

关于c# - Datagrid-复选框选择和取消选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195004/

相关文章:

c# - 在 C# 中更改启动窗体

c# - 如何在 C# 中禁用图表控件的缩放?

c# - 如何确定项目何时滚动到 View 中

xaml - "m2"在 XAML 中意味着什么?

c# - 使用 C++/CLI 桥连接 C++ 和 C# 代码

c# - 如何在WPF应用程序中显示错误表单App.xaml.cs

c# - WPF DataGrid - 如何在新添加的行上自动设置 EditMode?

WPF:在运行时从 App.xaml 更改资源(颜色)

c# - WPF MVVM 父子关系

c# - LINQ Distinct 未按预期工作