2011-07-08 42 views
0

所以我有这样的DataGrid: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,什么都没有。

当我检查执行过程中的DataGrid,它显示的项目数为0

任何人都知道我做错了,或者我可以试一下?

+0

你在任何时候都在更改Messages集合本身吗? (有没有其他的'Messages = something;'别的地方?)你会不会在代码中的任何地方乱用itemssource或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

好的。这就说得通了。那么我的例子就是在XAML中做的。任何想法,为什么它没有发生? – CamronBute