文章分類/Infragistics
讓我們將 ViewModel 的數據綁定到 XamDataGrid 的列。例如,讓我們考慮一個場景,其中 ViewModel 維護控制可編輯性的標誌數據,並根據標誌的狀態控制每列的單元格可編輯性。
視圖模型屬性
準備標誌以控制可編輯性、AllowTitleEdit 屬性(默認值 true)和 AllowDueEdit 屬性(默認值 false)。
class MainViewModel : NotificationObject { ... private bool _allowTitleEdit; public bool AllowTitleEdit { get { return _allowTitleEdit; } set { _allowTitleEdit = value; OnPropertyChanged(); } } private bool _allowDueEdit; public bool AllowDueEdit { get { return _allowDueEdit; } set { _allowDueEdit = value; OnPropertyChanged(); } } public MainViewModel() { ... #region 列編集可否 this.AllowTitleEdit = true; this.AllowDueEdit = false; #endregion } }
將 ViewModel 傳遞給 Window
將 ViewModel 傳遞給 Windows 的 DataContext。
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); // 將 Viewmodel 配分給 Window 的 DataContext MainViewModel vm = new MainViewModel(); this.DataContext = vm; } }
在 XAML 中定義 XamDataGrid
在 XamDataGrid 中定義四列,並將 AllowTitleEdit 和 AllowDueEdit 屬性綁定到“標題”和“截止日期”列的 AllowEdit 屬性。使用 FieldBinding 類將 ViewModel 數據綁定到 Field 屬性。請參閱下面代碼片段中的第 14-18 行。
<Window ... xmlns:igDP="http://infragistics.com/DataPresenter" x:Class="XamDataGrid_Field_AllowEdit.MainWindow" ...> <Grid> ... <igDP:XamDataGrid DataSource="{Binding Tasks}" Grid.Row="1"> ... <igDP:XamDataGrid.FieldLayouts> <igDP:FieldLayout> <igDP:FieldLayout.Fields> <igDP:Field Name="ID" Label="ID"/> <!--FieldBinding 使用的時機--> <igDP:Field Name="Title" Label="標題" AllowEdit="{igDP:FieldBinding AllowTitleEdit}"/> <igDP:Field Name="Due" Label="期限" AllowEdit="{igDP:FieldBinding AllowDueEdit}"/> <!--2014 vol.1 先前版本的用法1--> <!--<igDP:Field Name="Title" Label="標題" AllowEdit="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.AllowTitleEdit}"/> <igDP:Field Name="Due" Label="期限" AllowEdit="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.AllowDueEdit}"/>--> <!--2014 vol.1 先前版本的用法2--> <!--<igDP:Field Name="Title" Label="標題" AllowEdit="{Binding RelativeSource={RelativeSource Self}, Path=Owner.DataPresenter.DataContext.AllowTitleEdit}"/> <igDP:Field Name="Due" Label="期限" AllowEdit="{Binding RelativeSource={RelativeSource Self}, Path=Owner.DataPresenter.DataContext.AllowDueEdit}"/>--> <igDP:Field Name="IsCompleted" Label="是否完成"/> </igDP:FieldLayout.Fields> </igDP:FieldLayout> </igDP:XamDataGrid.FieldLayouts> </igDP:XamDataGrid> ... </Grid></Window>
FieldBinding 是 2014 vol.2 提供的函數。使用 2014 vol.1 或更早版本時, ViewModel 的作為Binding RelativeSource={RelativeSource Self}, Path=Owner.DataPresenter.DataContext.AllowTitleEdit 或 Binding RelativeSource={RelativeSource Self}, Path=DataContext.AllowTitleEdit 請參閱上面代碼片段中的第 20-30 行。