2017-08-17 76 views
-1

我有一個TreeView複選框。我在網上看過幾個例子,展示如何使用INotifyPropertyChanged將父/子複選框綁定在一起。然而,我試圖實現的不僅僅是這些。使用複選框操縱TreeView

假設我有2個不同的對象

主要對象

public class MainObject 
{ 
    public string Name; 
    public List<SubObject> SubObjects; 
    public bool? IsChecked; 
    //other parameters 
} 

子對象

public class SubObject 
{ 
    string Label; 
    public bool? IsChecked; 
    //other parameters 
} 

樹視圖顯示

- Main_Object_1(Name) 
    - Sub_Object_1(Label) 
    - Sub_Object_2(Label) 
- Main_Object_2(Name) 
    - Sub_Object_3(Label) 

我有3個目標:

1)父/子複選框協會

主要對象和子對象將反映這將依賴於用戶所點擊的複選框正確的狀態。

如果選中主對象複選框,則將檢查所有子對象。

如果子對象中的一個被選中,主要目的將是無效(完全填充有一些顏色)

2)不同組關聯

在任一個時刻一組(Main_Object_1或Main_Object_2 )可以被檢查。

假設只檢查「Main_Object_2」和「Sub_Object_3」。 檢查「Main_Object_1」或「Sub_Object_1」或「Sub_Object_2」時,未選中「Main_Object_2」和「Sub_Object_3」。

3)執行更新所述複選框顯示

我將需要執行其他任務,這取決於節點已選中/未選中旁其他任務。

有關如何完成此任務的任何指針? 謝謝。

+0

如果類數據屬性被聲明爲字段('public bool?IsChecked;'),你甚至不能通過綁定顯示它們。然而,如果它們是屬性('public bool?IsChecked {get; set;}'),你可以在setter中寫* any *邏輯並實現需求1.2.3。投入一些努力 – ASh

回答

0

我設法通過添加一個IsChecked屬性和父屬性以及Set屬性來獲得我想要的輸出。之後我添加了一些邏輯來操縱複選框狀態。對於目標3,我只需添加一個檢查過的事件處理程序來執行我需要的任務。