在数据网格 wpf 中调用选定的 checbox 方法

本文关键字:checbox 方法 调用 数据 数据网 网格 wpf | 更新日期: 2023-09-27 18:32:41

我有一个数据网格,项目源中的一个项目是布尔变量。

数据网格将布尔值转换为复选框。

我想知道如何添加事件复选框,单击数据网格内的复选框?

这是我的代码:

public class FilterMcode
{
    private bool cb;
    public bool Cb
    {
        get { return cb; }
        set { cb = value; }
    }
    private string mcode;
    public string Mcode
    {
        get { return mcode; }
        set { mcode = value; }
    }
    private string structureName;
    public string StructureName
    {
        get { return structureName; }
        set { structureName = value; }
    }
    public FilterMcode()
    {
        cb = true;
        structureName = "";
        mcode = "";
    }
}
public class Main ()
{
    private  List<FilterMcode> _qf;
    update void updateDataGrid()
    {
            DataGridCommands.ItemsSource = _qf;
            DataGridCommands.Items.Refresh();
    // calling check box click????
    }
}

在数据网格 wpf 中调用选定的 checbox 方法

tru 使用 INotifyPropertyChanged,则每次选中该复选框时,CB 属性都会更新。

诸如此类:

/// <summary>
/// implements the INotifyPropertyChanged (.net 4.5)
/// </summary>
public class BaseObservableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    protected virtual void OnPropertyChanged<T>(Expression<Func<T>> raiser)
    {
        var propName = ((MemberExpression)raiser.Body).Member.Name;
        OnPropertyChanged(propName);
    }
    protected bool Set<T>(ref T field, T value, [CallerMemberName] string name = null)
    {
        if (!EqualityComparer<T>.Default.Equals(field, value))
        {
            field = value;
            OnPropertyChanged(name);
            return true;
        }
        return false;
    }
}
public class FilterMcode:BaseObservableObject
{
    private bool cb;
    public bool Cb
    {
        get { return cb; }
        set
        {
            cb = value;
            OnPropertyChanged();
        }
    }
    private string mcode;
    public string Mcode
    {
        get { return mcode; }
        set
        {
            mcode = value;
            OnPropertyChanged();
        }
    }
    private string structureName;
    public string StructureName
    {
        get { return structureName; }
        set
        {
            structureName = value;
            OnPropertyChanged();
        }
    }
    public FilterMcode()
    {
        cb = true;
        structureName = "";
        mcode = "";
    }
}

然后以另一种方式更改您的主类

public class Main
{
    private List<FilterMcode> _qf;
    public void updateDataGrid()
    {
        _qf.ForEach(mcode => mcode.PropertyChanged += McodeOnPropertyChanged);
        DataGridCommands.ItemsSource = _qf;
        DataGridCommands.Items.Refresh();
        // calling check box click????
    }
    private void McodeOnPropertyChanged(object sender, PropertyChangedEventArgs args)
    {
        if(args.PropertyName != "Cb" ) return;
        //Add your logic here
    }
}

这是获得您想要的东西的简单方法。有一些向下:

  1. 您必须取消订阅该事件。

  2. 这不是使用 wpf 的 MVVM 方式。

问候。