1

編集: Infragistics フォーラムは既に見ました。以下のコードは、そのサンプルに基づいています。データバインディングは機能していないようです。

ビューに Infragistics XamDataGrid があります。

<DockPanel>
    <grid:XamDataGrid x:Name="gridData" DataContext="{Binding Path=DataEditorDataTable}" DataSource="{Binding Path=DataEditorDataTable.DefaultView}"
                      IsSynchronizedWithCurrentItem="True" Visibility="{Binding DataGridVisible}">
        <grid:XamDataGrid.FieldLayoutSettings>
            <grid:FieldLayoutSettings AutoGenerateFields="True" AllowAddNew="False" AllowDelete="False" />
        </grid:XamDataGrid.FieldLayoutSettings>
    </grid:XamDataGrid>
</DockPanel>

コンストラクターでユーザー コントロールのデータ コンテキストを設定します。

public DataEditor(SomeDataType DataType, IEventAggregator eventaggregator)
    {
        InitializeComponent();

        this.DataContext = new DataEditorViewModel(DataType, eventaggregator);
    }

dataeditor ビュー モデルでは、データが変更されたことを知らせるイベントをサブスクライブし、データ テーブルを作成して SetData メソッドを呼び出します。(グリッドに表示されるデータ列の数を事前に知ることはできません。また、これらの列はユーザ​​ーの操作によって変化し続けるため、データ テーブルを使用してバインドしたいと考えています。)

このようなメソッドでプロパティを割り当てます。

    /// <summary>
    /// Returns the data that the data editor displays.
    /// </summary>
    public DataTable DataEditorDataTable
    {
        get
        {
            return dtDataEditor;
        }
        set
        {
            dtDataEditor = value;
            OnPropertyChanged("DataEditorDataTable");
        }
    }

    /// <summary>
    /// Method to set data on load
    /// </summary>
    private void SetData(DataTable dtDataEditor)
    {
        if (!isDataEditorCellEdited)
            if (dtDataEditor != null && dtDataEditor.Rows.Count > 0)
            {
                try
                {
                    //Assign the data to the grid
                    DataEditorDataTable = dtDataEditor;
                    DataGridVisible = Visibility.Visible;
                }
                catch
                {
                    //If any exception occurs, hide the grid
                    DataGridVisible = Visibility.Collapsed;
                }
            }
            else                
                //If no data, hide the grid
                DataGridVisible = Visibility.Collapsed;                    

    }

問題は、バインディングが単に行われていないことです。バインディングに関して特に見逃したことはありますか?

4

1 に答える 1

2

バインディング エラーをデバッグするには、Visual Studio の出力ウィンドウを見て、エラーがないかどうかを確認する必要があります。

あなたが持っているコードを読んで、バインディングが正しくなく、次のようになるはずです。

DataContext="{Binding Path=DataEditorDataTable}" DataSource="{Binding Path=DefaultView}"

私が行った変更は、テーブルが既に DataContext であり、テーブルから DefaultView にバインドする必要があるため、DataSource のパスからテーブルからプロパティを削除することでした。

于 2013-01-02T22:45:52.977 に答える