文章分類/

Infragistics|Ultimate UI for WPF|將 XamTreeGrid 節點的展開狀態綁定到模型的屬性

359 瀏覽人次
2023-12-02 更新

infragistics log

“將所有 XamTreeGrid 節點的初始狀態(事件控製版本) ” 擴展到行為版本,並且

  1. 將名為 RecordExpansionMemberPath 的屬性新增至行為中,以便您可以指定模型中的哪個屬性應設定或引用擴充狀態。
  2. 將 DataRecordPresenter 的 IsExpanded 屬性與模型的屬性綁定。

這允許您綁定到模型屬性。

資料模型

// 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 屬性的值設定初始顯示時的展開/折疊狀態。

快速跳轉目錄

✦ 群昱 AccessSoft 你的全面軟體解決方案 ✦

身為全球眾多知名軟體在台灣合作夥伴,歡迎諮詢你需要的軟體服務!

Picture of 軟體專家
軟體專家

群昱作為全球知名軟體推薦合作夥伴,致力於提供更多軟體解決方案給你!

更多軟體新知

立即詢價

請留下完整資訊,以便我們提供精確的服務內容給你。

詢價資訊