文章分類/Infragistics
“將所有 XamTreeGrid 節點的初始狀態(事件控製版本) ” 擴展到行為版本,並且
這允許您綁定到模型屬性。
資料模型
// Employee.cs public class Employee : ObservableObject { // 従業員ID private int _employeeID; public int EmployeeID { get { return _employeeID; } set { _employeeID = value; OnPropertyChanged(); } } // 氏名 private String _name; public String Name { get { return _name; } set { _name = value; OnPropertyChanged(); } } // このノードを展開するかどうかのフラグ // このフラグをビューとバインドします。 private bool _isExpanded; public bool IsExpanded { get { return _isExpanded; } set { _isExpanded = value; OnPropertyChanged(); } } // 部下 private ObservableCollection _subordinates; public ObservableCollection Subordinates { get { return _subordinates; } set { _subordinates = value; OnPropertyChanged(); } } // コンストラクター public Employee() { } }
假定這是公司員工資料。假設它具有員工 ID、姓名和下屬訊息,並且可以使用第 24 至 28 行的 IsExpanded 屬性來設定和引用該節點的展開狀態。
行為
// InitialRecordExpansionBehavior.cs public class InitialRecordExpansionBehavior : Behavior { // 展開するかどうかを保持するプロパティ名を設定・取得するプロパティを追加します。 public string RecordExpansionMemberPath { get; set; } // InitializeRecordイベントのイベントハンドラーの登録と解除 protected override void OnAttached() { AssociatedObject.InitializeRecord += AssociatedObject_InitializeRecord; } protected override void OnDetaching() { AssociatedObject.InitializeRecord -= AssociatedObject_InitializeRecord; } // InitializeRecordイベントのイベントハンドラー private void AssociatedObject_InitializeRecord(object sender, Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e) { var dataRecord = e.Record as DataRecord; if (!string.IsNullOrEmpty(RecordExpansionMemberPath) && dataRecord != null && dataRecord.DataItem != null) { // RecordExpansionMemberPathで指定されたプロパティの値を取り出し、DataRecordのIsExpandedに設定します。 var pinfo = dataRecord.DataItem.GetType().GetProperty(RecordExpansionMemberPath); if (pinfo != null) { var result = (bool)pinfo.GetValue(dataRecord.DataItem, null); dataRecord.IsExpanded = result; } } } }
第 6 行將 RecordExpansionMemberPath 定義為屬性,該屬性指定模型端設定和引用擴充狀態的屬性的名稱。
第 25-30 行從 RecordExpansionMemberPath 指定的屬性中擷取值,並設定 DataRecord 的 IsExpanded 屬性的值。
InitializeRecord 事件的註冊/取消與「展開所有處於初始狀態的 XamTreeGrid 節點(事件控製版本) 」相同。
看法
<!-- MainWindow.xaml --> <igDP:XamTreeGrid x:Name="xamTreeGrid1" DataSource="{Binding Employees}"> <igDP:XamTreeGrid.Resources> <!-- DataRecordPresenterのIsExpandedプロパティとデータモデルのIsExpandedプロパティとをバインドします --> <Style TargetType="{x:Type igDP:DataRecordPresenter}"> <Setter Property="IsExpanded" Value="{Binding Path=DataItem.IsExpanded, Mode=TwoWay}"/> </Style> </igDP:XamTreeGrid.Resources> <!-- ビヘイビアを追加し、RecordExpansionMemberPathプロパティにデータモデルのIsExpandedプロパティを指定します。 --> <i:Interaction.Behaviors> <local:InitialRecordExpansionBehavior RecordExpansionMemberPath="IsExpanded"/> </i:Interaction.Behaviors> </igDP:XamTreeGrid>
第 7 行到第 9 行將屬性 IsExtanded(指示在視覺化樹上繪製記錄的 DataRecordPresenter 的展開狀態)綁定到模型屬性 IsExtanded。現在,顯示後由 UI 操作引起的展開/折疊狀態的變化將反映在模型端。
第 13 行到第 15 行新增了一些行為,以根據模型端 IsExpanded 屬性的值設定初始顯示時的展開/折疊狀態。