您的位置:首页 > 其它

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

2011-09-03 23:05 477 查看
无论何时绑定一个集合,都会有一个默认的视图隐式被插入到源对象和目标对象之间,该视图(实现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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: