WPF 数据绑定 定制一个集合的视图

来源:互联网 发布:淘宝主图视频尺寸 编辑:程序博客网 时间:2024/05/22 01:43

无论何时绑定一个集合,都会有一个默认的视图隐式被插入到源对象和目标对象之间,该视图(实现ICollectionView接口的对象),存储当前信息。

 

排序

//排序private void SortHelper(string propertyName){    //返回给定源的默认视图    //ICollectionView view = CollectionViewSource.GetDefaultView(this.FindResource("photoList");    ICollectionView view = CollectionViewSource.GetDefaultView(pl);    //ICollectionView的SortDescriptions属性来控制视图排序    if (view.SortDescriptions.Count > 0        && view.SortDescriptions[0].PropertyName == propertyName        && view.SortDescriptions[0].Direction == ListSortDirection.Ascending)    {        view.SortDescriptions.Clear();        view.SortDescriptions.Add(new SortDescription(propertyName, ListSortDirection.Descending));    }    else    {        view.SortDescriptions.Clear();        view.SortDescriptions.Add(new SortDescription(propertyName, ListSortDirection.Ascending));    }}//调用SortHelper("Name");

分组

//转换时间为指定格式class DateTimeToDateConverter : IValueConverter{    #region IValueConverter 成员    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        return ((DateTime)value).ToString("dd/MM/yyyy");    }    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)    {        throw new NotImplementedException();    }    #endregion}//分组private void GroupHelper(string propertyName){    ICollectionView view = CollectionViewSource.GetDefaultView(pl);    //ICollectionView的GroupDescriptions属性来控制视图排序    view.GroupDescriptions.Clear();    //用指定属性名,转换器分组    view.GroupDescriptions.Add(new PropertyGroupDescription(propertyName, new DateTimeToDateConverter()));}//调用,按DateTime属性分组GroupHelper("DateTime");
<ListBox x:Name="listBox1" SelectedValuePath="Name" ItemsSource="{Binding}"    IsSynchronizedWithCurrentItem="True" SelectionChanged="listBox2_SelectionChanged">    <ListBox.GroupStyle>        <GroupStyle>            <!-- 定义分组头外观 -->            <GroupStyle.HeaderTemplate>                <!-- 数据模板会有一特殊CollectionViewGroup对象数据上下文 -->                <DataTemplate>                    <Border BorderBrush="Black" BorderThickness="1">                        <!-- 该上下文包含一Name属性表示每个分组的名称,需要绑定 -->                        <TextBlock Text="{Binding Path=Name}" FontWeight="Bold"/>                    </Border>                </DataTemplate>            </GroupStyle.HeaderTemplate>        </GroupStyle>    </ListBox.GroupStyle></ListBox>


过滤

//过滤private void FilterHelper(){    ICollectionView view = CollectionViewSource.GetDefaultView(pl);    //ICollectionView的Filter委托对象,设置后会马上回调    //该委托的工作就是决定某项的显示(返回true)隐藏(返回false)    //要删除该过滤,只需Filter = null    view.Filter = delegate(object o)    {        return (DateTime.Now - (o as PhotoModel).DateTime).Days <= 1;    };}//调用FilterHelper();
原创粉丝点击