【问题标题】:How to bind two things to IsChecked property of checkbox?如何将两个东西绑定到复选框的 IsChecked 属性?
【发布时间】:2020-11-16 06:58:54
【问题描述】:

好的,所以我在 DataGridTemplateColumn 中有一个带有复选框的数据网格,因为我想进行单击检查。我在顶部还有一个“全选”复选框。 (我禁用了标题,因为我想制作一个自定义标题)。我的数据网格是以编程方式填充的。我正在使用 mahApps nuget 包(如果这意味着什么)。

我想要做的是将“全选”状态绑定到我填充的复选框上的 IsChecked 属性,但也能够单击该行以选中复选框。但为了能够做到这一点,我需要添加:IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=IsSelected, Mode=OneWay}"

我有两个,它们都可以工作,但我似乎一次只能使用一个。我将如何做这两件事?如果您需要更多信息,请告诉我

编辑:我还需要多选!

【问题讨论】:

    标签: c# .net wpf checkbox datagrid


    【解决方案1】:

    这是伪代码:

    要使每行复选框可独立点击 - 行的 ViewModel 应该具有 bool IsChecked 获取设置属性。对于顶级“全选”复选框 - 您需要顶级布尔值吗? SelectAll 也可以获取设置属性 - getter 类似于 --

    让我们说绑定到 GridView 的集合是

    List<RowViewModel>RowViewModelCollection;
    

    那么每个 RowViewModel 对象都会有:

    private bool _IsSelected = null;
    public bool IsSelected
    {
        get => _IsSelected;
        set
        {
            _IsSelected  = value;
            // NotifyProperty Change for this property
            // Notify Property Change for TopLevel SelectAll property
        }
    }
    

    您的顶级 SelectAll 应如下所示:

    public bool? SelectAll
    {
        get
        {
            if(RowViewModelCollection.All(r=>r.IsSelected == true))
                return true;
            else if(RowViewModelCollection.All(r=>r.IsSelected == false))
                return false;
            else
                return null;
        }
        set
        {
           foreach(var row in RowViewModelCollection)
           {
              row.IsSelected = value;
           }
    
           // Notify Property Changed for This property
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 2015-03-28
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多