Wpf 将AlternationIndex与样式中的可见性相结合
以下是一种样式,当绑定到属性ALIVE=false的记录时隐藏ListViewItem,然后基于AlternationalIndex设置相同ListViewItem背景的颜色: 目的是: 首先,隐藏所有活动设置为false的记录 然后,对其余行应用交替背景色。 实际发生的情况: 将隐藏活动设置为false的记录 交替背景应用于所有行,从而打破交替 效果:你可能会得到黄色/黄色/白色/黄色,而不是黄色/白色/白色 现在的问题是: 是否可以通过告诉AlternationIndex跳过应该隐藏的行来控制AlternationIndex 我不喜欢的一个选择:Wpf 将AlternationIndex与样式中的可见性相结合,wpf,xaml,styles,itemscontrol,Wpf,Xaml,Styles,Itemscontrol,以下是一种样式,当绑定到属性ALIVE=false的记录时隐藏ListViewItem,然后基于AlternationalIndex设置相同ListViewItem背景的颜色: 目的是: 首先,隐藏所有活动设置为false的记录 然后,对其余行应用交替背景色。 实际发生的情况: 将隐藏活动设置为false的记录 交替背景应用于所有行,从而打破交替 效果:你可能会得到黄色/黄色/白色/黄色,而不是黄色/白色/白色 现在的问题是: 是否可以通过告诉AlternationIndex跳过应该隐藏的行来控
与其用样式隐藏行,不如从绑定到ListView的基础集合中筛选出不活动的行。在集合的getter属性中使用简单的LINQ可以节省时间,而不是使用面向UI的解决方案。。下面是它的样子
private ObservableCollection<YourClass> _allDataItems;
//The entire collection
public ObservableCollection<YourClass> AllDataItems
{
get
{
return _allDataItems;
}
set
{
if( _allDataItems == value ) { return; }
_allDataItems = value;
if( _allDataItems != null )
{
_allDataItems.CollectionChangedEvent += ( s, e ) =>
{
RaisePropertyChanged( "DisplayedDataItems" );
};
}
RaisePropertyChanged( "AllDataItems " );
RaisePropertyChanged( "DisplayedDataItems" );
}
}
//The displayed colelction
public ObservableCollection<YourClass> DisplayedDataItems
{
get
{
return AllDataItems.Where( adi => adi.ALIVE == true );
}
}
您可以简单地将DisplayedDataItems绑定到ListView。集合属性的getter中的一个简单LINQ将为您节省时间,而不是面向UI的解决方案。。下面是它的样子
private ObservableCollection<YourClass> _allDataItems;
//The entire collection
public ObservableCollection<YourClass> AllDataItems
{
get
{
return _allDataItems;
}
set
{
if( _allDataItems == value ) { return; }
_allDataItems = value;
if( _allDataItems != null )
{
_allDataItems.CollectionChangedEvent += ( s, e ) =>
{
RaisePropertyChanged( "DisplayedDataItems" );
};
}
RaisePropertyChanged( "AllDataItems " );
RaisePropertyChanged( "DisplayedDataItems" );
}
}
//The displayed colelction
public ObservableCollection<YourClass> DisplayedDataItems
{
get
{
return AllDataItems.Where( adi => adi.ALIVE == true );
}
}
您可以简单地将DisplayedDataItems绑定到ListView。我同意最简单的方法是在绑定之前过滤数据源。但是,如果您无法学习该课程,您可以使用ObjectDataProvider和CollectionViewSource以及交替行颜色的样式在XAML中过滤数据源。请参见此处的过滤示例:我同意最直接的方法是在绑定之前过滤数据源。但是,如果您无法学习该课程,您可以使用ObjectDataProvider和CollectionViewSource以及交替行颜色的样式在XAML中过滤数据源。请看这里的过滤示例:据我所知,在使用变更索引时,隐藏项仍然有效,这就是为什么变更颜色看起来像随机的,但实际上不是。我认为,像你提到的那样,在这里使用源代码集合比发明与UI相关的解决方案更容易。据我所知,在使用变更索引时,隐藏项仍然很重要,这就是为什么变更颜色看起来像随机的,但实际上不是随机的。我认为像你提到的那样,在这里使用源代码集合比发明与UI相关的解决方案更容易。