【问题标题】:WPF DataGrid not picking up CollectionChanged events?WPF DataGrid 没有接收 CollectionChanged 事件?
【发布时间】:2011-07-08 22:14:49
【问题描述】:

所以我有这个 DataGrid:

<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。

有人知道我做错了什么,或者我可以尝试什么吗?

【问题讨论】:

  • 您是否随时更改 Messages 集合本身? (在其他地方还有其他Messages = something; 吗?)您是否会在任何地方弄乱代码中的 itemssource 或 datacontext?您是否在输出窗口中看到任何绑定警告/错误?

标签: wpf data-binding wpfdatagrid


【解决方案1】:

我不知道您的代码有什么问题,但这可行。

<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;

【讨论】:

  • 我试过了。但是,每次都必须设置数据上下文并不是真正的数据绑定。我希望能够在需要时修改集合并刷新绑定。我相信这就是使用 ObservableCollection 的全部意义所在。否则,我可以只使用一个列表。
  • @CamronBute 上面的代码在我的测试项目的Window.Loaded中执行一次。
  • 好的。这就说得通了。然后我的示例只是在 XAML 中执行此操作。知道为什么它没有发生吗?
  • @CamronBute 通常在出现绑定错误时发生。您是否尝试在调试模式下查看输出窗口。调试 WPF 应用程序时,输出窗口会显示绑定错误。
猜你喜欢
  • 2023-03-13
  • 2014-10-16
  • 1970-01-01
  • 2011-06-06
  • 2017-06-15
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多