主從式繫結是一種過濾形式:主頁面列表(如客戶清單)選取特定項目時,從頁面顯示該項目關聯的詳細資料(如該客戶的訂單)。本範例使用 Families(家族集合)→ Family(家族)→ People(成員集合)→ Person(人員)的四層資料結構來示範。
public class Families : ObservableCollection<Family> {}
public class Family {
public string FamilyName { get; set; }
public People Members { get; set; }
}
public class People : ObservableCollection<Person> {}
public class Person {
public string Name { get; set; }
public int Age { get; set; }
}
在 Window.Resources 中宣告 Families 資料,包含兩個 Family(Stooge 家族與 Addams 家族),各自擁有多位 Person 成員。主頁面 ListBox 繫結到 Families 集合,顯示 FamilyName,並設定 IsSynchronizedWithCurrentItem="True" 以同步當前選取項目。
從頁面 ListBox 的 ItemsSource="{Binding Path=Members}" 繫結到當前選取 Family 的 Members 屬性。標題區使用 TextContent="{Binding Path=FamilyName}" 顯示當前家族名稱。執行結果如圖 4-21 所示,選取不同家族時,成員清單自動更新。

擴充 Person 類別加入 Traits 屬性(ObservableCollection<Trait>),每個 Trait 有 Description。XAML 中第三欄 ListBox 使用 ItemsSource="{Binding Path=Members/Traits}" 繫結到當前 Person 的特質集合。標題使用 TextContent="{Binding Path=Members/Name}" 顯示當前人員姓名。斜線 / 在繫結路徑中作為層級分隔符,每一層假定為「當前選取項目」。

{Binding Path=FamilyName}(當前 Family){Binding Path=Members/Name}(當前 Family 的當前 Person)Members/Traits