Using CollectionViewSource for SelectedItem.ObservableCollec

本文关键字:ObservableCollec SelectedItem for CollectionViewSource Using | 更新日期: 2023-09-27 18:22:08

我正在尝试让CollectionViewSource用于SelectedItem对象的ObservableCollection,但我没有得到我所期望的。列表视图没有使用选定项属性更改更新的项目。

我有一个带有SelectedCar对象的ObservableCollection<Car> Cars,该对象绑定到可观察集合附加到的 ListView 的 SelectedItem 属性。这里一切都很好。

Car类有一个ObservableCollection<string> Tyres,这是这里感兴趣的对象。

从这里,我想将另一个 ListView 的ItemsSource绑定到SelectedCar.Tyres对象。最初,SelectedCar为空,因为在原始汽车列表视图中未选择任何内容。我在这里使用ICollectionView的原因是因为我需要在轮胎列表视图上进行过滤。

在我的ViewModel中,我已将ICollectionView声明为:

private ICollectionView tyreCollectionView;
public ICollectionView TyreCollectionView
{
    get
    {
        return this.tyreCollectionView;
    }
}

并且,在SelectedCar的二传手中,我这样做:

this.tyreCollectionView = CollectionViewSource.GetDefaultView(value.Tyres);
this.tyreCollectionView.Filter += this.FilterByTyreName;

至于 XAML,有问题的 ListView 绑定到 ICollectionView,如下所示。

<ListView ItemsSource={Binding YCollectionView}/>

我也尝试打电话给this.tyreCollectionView.Refresh()但这没有任何作用。列表视图未填充任何结果。当我尝试调试SelectedCar资源库的代码时,我可以看到 ICollectionView 确实显示了 value.Tyres 中的项目,只是这些值没有出现在列表视图中。

我无法在 MainViewModel 的构造函数中初始化yCollectionView,因为在该阶段,SelectedCar 对象仍然是空的,并且执行类似 CollectionViewSource.GetDefaultView(this.SelectedCar.Tyres) 的操作会引发NullReferenceException

谁能在这个问题上指导我?非常感谢:)

Using CollectionViewSource for SelectedItem.ObservableCollec

根据评论,答案是这样的YCollectionView属性的实现NotifyPropertyChanged

private ICollectionView tyreCollectionView;    
public ICollectionView TyreCollectionView
{
    get
    {
        return this.tyreCollectionView;
    }
    set
    {
        this.tyreCollectionView = value; NotifyPropertyChanged( "TyreCollectionView" );
    }
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
protected void NotifyPropertyChanged( String info )
{
    if ( PropertyChanged != null )
    {
        PropertyChanged( this, new PropertyChangedEventArgs( info ) );
    }
}