文章分類/

Infragistics|Ultimate UI|將 ViewModel 的數據綁定到 XamDataGrid 字段

278 瀏覽人次
2023-02-14 更新

infragistics log

讓我們將 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 行。

快速跳轉目錄

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

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

Picture of 軟體專家
軟體專家

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

更多軟體新知

立即詢價

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

詢價資訊