![](/img/trans.png)
[英]In WPF, how do I two-way bind a Checkbox's IsChecked to property to List<>.Contains?
[英]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.