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
。
谁能在这个问题上指导我?非常感谢:)
根据评论,答案是这样的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 ) );
}
}