将 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
.
谁能指导我解决这个问题?非常感谢:)
根据评论回答是 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 ) );
}
}
我试图让 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
.
谁能指导我解决这个问题?非常感谢:)
根据评论回答是 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 ) );
}
}