gpt4 book ai didi

c# - CollectionViewSource 代码隐藏绑定(bind) MVVM 的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 16:48:38 24 4
gpt4 key购买 nike

我有 MainWindow.xaml( View )和 MainWindowViewModel.cs( View 模型)。在我的程序中,我在 Worklist.Result (observablecollection) 中有用于在启动时异步加载数据的自定义类。此时我需要使用自定义过滤数据。如果我在 xaml 中创建 CollectionViewSource,所有显示都完美,但我无法将 Filter 事件绑定(bind)到 CollectionViewSource。好的,然后我需要代码隐藏 CollectionView ......但最后 DataGrid 不显示数据(没有绑定(bind)错误,CollectionViewSource 有所有记录)。为什么?示例 1:(XAML 创建的 CollectionViewSource 没有过滤)一切正常!
主窗口.xaml

...
<xdg:DataGridCollectionViewSource x:Key="DataItems"
Source="{Binding WorkList.Result}"
<xdg:DataGridCollectionViewSource.GroupDescriptions>
<xdg:DataGridGroupDescription PropertyName="Date"/>
</xdg:DataGridCollectionViewSource.GroupDescriptions>
</xdg:DataGridCollectionViewSource>-->
...
<xdg:DataGridControl VerticalAlignment="Stretch" Background="White" ItemsSource="{Binding Source={StaticResource DataItems}}" ... </xdg:DataGridControl>

示例 2:(CodeBehind 创建的 CollectionViewSource 没有过滤)DataGrid 中没有记录!

主窗口.xaml

<xdg:DataGridControl VerticalAlignment="Stretch" Background="White" ItemsSource="{Binding DataItems}" ... </xdg:DataGridControl>

MainWindowViewModel.cs

...
public ICollectionView DataItems { get; private set; }
...
private void WorkList_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
DataItems = CollectionViewSource.GetDefaultView(WorkList.Result);

}

然后 WorkList_PropertyChanged 事件引发了 CollectionViewSource 中的所有数据,但没有引发 DataGrid 中的所有数据。有人可以帮忙解决这个问题吗?

最佳答案

为了让 WPF 引擎知道 DataItems 已更新为新值,您的 DataItems 需要通知 PropertyChanged

即使 CollectionViewSource.GetDefaultView(WorkList.Result); 的结果是一个 ObservableCollection, View 也不知道它,因为没有通知 DataItems 已更新。

确保您的 MainWindowViewModel 实现了 INotifyPropertyChanged,您可以:

...
private ICollectionView _dataItems;
public ICollectionView DataItems {
get
{
return this._dataItems;
}
private set
{
this._dataItems = value;
this.OnPropertyChanged("DataItems"); // Update the method name to whatever you have
}
...

关于c# - CollectionViewSource 代码隐藏绑定(bind) MVVM 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37905339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com