将 CollectionViewSource 用于 SelectedItem.ObservableCollection

Using CollectionViewSource for SelectedItem.ObservableCollection

我试图让 CollectionViewSource 为 SelectedItem 对象的 ObservableCollection 工作,但我没有得到我期望的结果。 ListView 没有使用 SelectedItem 属性 更改更新的项目。

我有一个 ObservableCollection<Car> Cars 和一个 SelectedCar 对象,它绑定到 ObservableCollection 附加到的 ListView 的 SelectedItem 属性。这里一切都很好

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

从这里开始,我想将另一个 ListView 的 ItemsSource 绑定到 SelectedCar.Tyres 对象。最初 SelectedCar 为 null,因为原始 Cars ListView 中未选择任何内容。我在这里使用 ICollectionView 的原因是因为我需要在 Tires ListView 上完成过滤。

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

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

并且,在 SelectedCar 的 Setter 中,我这样做:

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

至于XAML,问题中的ListView绑定到ICollectionView如下。

<ListView ItemsSource={Binding YCollectionView}/>

我也尝试调用 this.tyreCollectionView.Refresh(),但这也没有任何作用。 ListView 没有填充任何结果。当我尝试为 SelectedCar setter 调试我的代码时,我可以看到 ICollectionView 确实显示了 value.Tyres 中的项目,只是这些值没有出现在 ListView 中。

我无法在我的 MainViewModel 的构造函数中初始化 yCollectionView,因为在那个阶段,SelectedCar 对象仍然为 null,并且执行类似 CollectionViewSource.GetDefaultView(this.SelectedCar.Tyres) 的操作将抛出 NullReferenceException.

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

根据评论回答是 NotifyPropertyChangedYCollectionView 属性 那样的实现。

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