我有一个绑定到 ViewModel 中的 ObservableCollection 的 DataGrid。这是一个搜索结果 DataGrid。问题在于,当我更新搜索结果 ObservableCollection 后,实际的 DataGrid 没有更新。
在我被投票降级之前,请注意这不是关于列中的数据(绑定完美工作),而是关于清除并将全新数据放入 ObservableCollection 而没有更新 DataGrid。因此,像这样链接到某个内容将无法帮助我,因为我的属性正常工作。
背景:
ObservableCollection 在 ViewModel 中声明如下:
在
该方法正确触发并产生所需结果。然而,
在我被投票降级之前,请注意这不是关于列中的数据(绑定完美工作),而是关于清除并将全新数据放入 ObservableCollection 而没有更新 DataGrid。因此,像这样链接到某个内容将无法帮助我,因为我的属性正常工作。
背景:
ObservableCollection 在 ViewModel 中声明如下:
public ObservableCollection<MyData> SearchCollection { get; set; }
我绑定了我的搜索ObservableCollection
到这个搜索DataGrid
中,就像这样:
<DataGrid ItemsSource="{Binding SearchCollection}" />
在
ViewModel
中,我有一个搜索方法,就像这样;var results =
from x in MainCollection
where x.ID.Contains(SearchValue)
select x;
SearchCollection = new ObservableCollection<MyData>(results);
该方法正确触发并产生所需结果。然而,
DataGrid
未更新为新结果。我知道ViewModel
具有正确的数据,因为如果我在页面上放置一个按钮,并在单击事件中放置此代码;private void selectPromoButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
var vm = (MyViewModel)DataContext;
MyDataGrid.ItemsSource = vm.SearchCollection;
}
< p > DataGrid
现在可以正确显示结果。
我知道我可以在页面的代码后台中放置一些事件,但那样做不是违背了MVVM吗?处理这个问题的正确MVVM方式是什么?