当我的 observableCollection 在视图模型中更新时刷新我的数据网格是一场噩梦。在我发现 DataGrid 不会响应 ObservableCollection 引发的事件后,我发现了 DataGrid.Items.Refresh。它确实刷新,但随后 DataGrid 失去焦点。我有一个简单的列表,我想在按下一个键然后更新时更改一个值。用户在使用键盘快捷键时必须再次选择鼠标是不可接受的......这是一个简单的例子:
<DataGrid x:Name="MyDataGrid" SelectionMode="Single" AutoGenerateColumns="False" IsReadOnly="True" KeyUp="MyDataGrid_KeyUp">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding Path=First}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding Path=Last}"/>
</DataGrid.Columns>
</DataGrid>
以及背后的代码:
private void MyDataGrid_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key.Equals(Key.Space))
{
MyDataGrid.Items.Refresh();
}
}
ps 在这个例子中,我在后面的代码中设置了 ItemsSource,而不是绑定到 ObservableCollection。另外我只使用代码隐藏而不是 ViewModel,但问题是一样的。
编辑:最初的问题是我没有在课堂上使用 NotifyPropertyChanged。但是,这里提出的问题仍然是“开放的”,当我执行 Refresh() 时,我无法真正理解失去焦点的问题