2011-07-08 10 views
0

は、だから私は、このデータグリッドがあります。WPF DataGridはCollectionChangedイベントを取得しませんか?

<DataGrid d:DataContext="{d:DesignData Source=../DesignData/ValidationMessages.xaml}" DataContext="{Binding Messages, Mode=OneWay}" ItemsSource="{Binding Mode=OneWay}" Name="Grid"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Message}" Header="Message"/> 
     <DataGridTextColumn Binding="{Binding ControlID}" Header="ID"/> 
    </DataGrid.Columns> 
</DataGrid> 

を、私は、このプロパティがあります。

public ObservableCollection<ValidationMessage> Messages = new ObservableCollection<ValidationMessage>(); 

を、私はこのコードを持っている:

Messages.Add(message); 

をとDataGridが変更を表示しません。それは、そうでしょうか?私は何百万回もこれをやったような気がしますが、何らかの理由でうまく機能しません。

コントロール全体のDataContextを独自のコードビハインドに設定しました。私は、バインディングのBindingMode、何もしゃがんでみました。

私は、実行時にデータグリッドを検査するとき、それはアイテムは0

誰もが私が間違っているのか知っている、または私が試すことができるものであることを示して数えますか?

+0

あなたはいつでもメッセージコレクションを変更していますか? (他にもいくつかの 'Messages = something;'どこかにありますか?)そうでなければ、コードソースのitemsourceやdatacontextを混乱させますか?出力ウィンドウに綴りの警告/エラーが表示されていますか? –

答えて

0

あなたのコードに何が問題なのか分かりませんが、これはうまくいきます。

<DataGrid ItemsSource="{Binding Mode=OneWay}" Name="Grid" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Message}" Header="Message"/> 
     <DataGridTextColumn Binding="{Binding ControlID}" Header="ID"/> 
    </DataGrid.Columns> 
</DataGrid> 

ObservableCollection<ValidationMessage> Messages = 
    new ObservableCollection<ValidationMessage>(); 
this.DataContext = Messages; 
+0

私はそれを試みました。しかし、毎回データコンテキストを設定しなければならないのは、実際にはデータバインディングではありません。私は欲しいときにコレクションを修正し、バインディングをリフレッシュさせたいと思っています。私はこれがObservableCollectionを使うことの背後にある全体のポイントだと考えています。さもなければ、私はリストを使うことができます。 – CamronBute

+0

@CamronBute上記のコードは、テストプロジェクトのWindow.Loadedで一度実行されます。 –

+0

OK。それは理にかなっている。次に、私の例ではXAMLでそれを行います。なぜそれが起こっていないのか? – CamronBute