繁体   English   中英

如何将两个东西绑定到复选框的 IsChecked 属性?

[英]How to bind two things to IsChecked property of checkbox?

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

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

我有他们两个,他们都工作,但我似乎一次只能使用一个。 我将如何 go 两者都做? 如果您需要更多信息,请告诉我

编辑:我还需要多选!

这是伪代码:

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

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

List<RowViewModel>RowViewModelCollection;

然后每个 RowViewModel object 将具有:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM