![](/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.