0

私はC#を使用して.Net4.0を対象としたWPFプログラムを作成しています。私はMVVMパターンに従おうとしています。ここでは、ビュー(コードビハインド)に最小限のコードが含まれています。

List<MyRecord>使用してGUIに表示したいものがありますDataGrid。私のXAMLには、次のものがあります。

<DataGrid x:Name="RecordGrid" ...>
   <DataGrid.Columns>
      <DataGridTextColumn Binding="{Binding RecId}" Header="Record ID"/>
      <DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
   </DataGrid.Columns>
</DataGrid>

残っているのは、このグリッドをデータコレクションにバインドすることだけです。

コードビハインドファイルでバインドすると、正常に機能します。

RecordGrid.ItemsSource = MyRecordList;

ただし、XAMLで宣言的にバインドすることをお勧めします。だから私はこれを試しました:

<DataGrid x:Name="RecordGrid" ItemsSource="{Binding MyRecordList}" ...>

しかし、それは静かに機能しません。データグリッドのロード時にXAMLバインディングエラーメッセージは表示されません。MyRecordListのgetメソッドにブレークポイントを設定しましたが、ItemsSourceが宣言的に定義されている限り、ブレークポイントが呼び出されることはありません。

MyRecordListXAML経由でデータグリッドをプルするにはどうすればよいですか?

4

1 に答える 1

0

バインディングを機能させるには、DataContextを設定する必要があります...MVVMパターンにはViewとViewModelがあります。ビューはUIです。たとえば、ウィンドウ(MainWindowと呼びましょう)とViewModelは、RecordGridプロパティと他のすべてのコマンド/プロパティ(クラスMainWindowViewModelと呼びましょう)がある場所です。

両方を接続する必要があります。これは、ビューで誰であるDataContextか(この場合はMainWindowViewModelクラス)を指定することによって行われます。

したがって、Viewのコンストラクターで次のようなことを行う必要があります。

    public MainWindow()
    {
        this.DataContext = new MainWindowViewModel();
        InitializeComponent();
于 2013-02-05T22:31:25.423 に答える