![](/img/trans.png)
[英]Listbox live sort using CollectionViewSource on ObservableCollection
[英]Using CollectionViewSource for SelectedItem.ObservableCollection
我試圖讓CollectionViewSource為SelectedItem對象的ObservableCollection工作,但是我沒有得到我所期望的。 ListView沒有使用SelectedItem屬性更改更新的項目。
我有一個帶有SelectedCar
對象的ObservableCollection<Car> Cars
,該對象綁定到ObservableCollection所附加的ListView的SelectedItem
屬性。 一切都很好。
Car
類具有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
。
誰能指導我這個問題? 非常感謝 :)
根據評論,答案是這樣的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 ) );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.