我正在尝试让CollectionViewSource用于SelectedItem对象的ObservableCollection,但我没有得到我所期待的。 ListView没有使用SelectedItem属性更改更新的项目。
我有一个带有ObservableCollection<Car> Cars
对象的SelectedCar
,该对象绑定到附加ObservableCollection的ListView的SelectedItem
属性。一切都很好。
Car
类有一个ObservableCollection<string> Tyres
,这是感兴趣的对象。
从这里开始,我想将另一个ListView的ItemsSource
绑定到SelectedCar.Tyres
对象。最初SelectedCar
为空,因为原始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
对象仍然为空,执行CollectionViewSource.GetDefaultView(this.SelectedCar.Tyres)
之类的操作会抛出NullReferenceException
任何人都可以指导我这个问题吗?非常感谢:)
答案 0 :(得分:1)
根据评论,答案是NotifyPropertyChanged
属性的实现YCollectionView
。
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 ) );
}
}