簡體   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