为了完整起见,这里是一个无转换器的非(最小)xaml解决方案。
XAML:
<Grid>
<Grid.Resources>
<ObjectDataProvider x:Key="srcPersonType" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:PersonType"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ComboBox ItemsSource="{Binding Source={StaticResource srcPersonType}}" SelectedItem="{Binding SelectedType}"/>
<DataGrid Grid.Row="1" ItemsSource="{Binding MyView}"/>
</Grid>
视图模型:
public class ViewModel
{
public ObservableCollection<Person> Persons { get; set; }
public ICollectionView MyView { get; set; }
private PersonType _selectedType;
public PersonType SelectedType
{
get { return _selectedType; }
set { _selectedType = value; this.MyView.Refresh(); }
}
public ViewModel()
{
Persons = new ObservableCollection<Person>();
Persons.Add(new Person() { Name = "ABC", Type = PersonType.Manager });
Persons.Add(new Person() { Name = "DEF", Type = PersonType.Manager });
Persons.Add(new Person() { Name = "GHI", Type = PersonType.Customer });
Persons.Add(new Person() { Name = "JKL", Type = PersonType.Manager });
Persons.Add(new Person() { Name = "MNO", Type = PersonType.Employee });
this.MyView = CollectionViewSource.GetDefaultView(this.Persons);
this.MyView.Filter = (item) =>
{
var person = (Person) item;
if (this.SelectedType == null || this.SelectedType == PersonType.All)
return true;
if (person.Type == this.SelectedType)
return true;
return false;
};
}
}
persontype为枚举:
public enum PersonType
{
All,
Manager,
Customer,
Employee
}
编辑:以适应从注释
视图模型要求3210
public IEnumerable<PersonType> MyGroup { get { return this.Persons.Select(x => x.Type).Distinct(); } }
//when ever your Person collection is altered, you have to call OnPropertyChanged("MyGroup")
XAML
<ComboBox ItemsSource="{Binding MyGroup}" SelectedItem="{Binding SelectedType}" />
<DataGrid Grid.Row="1" ItemsSource="{Binding MyView}"/>
你写分组时均值滤波? – blindmeis 2012-07-26 07:22:38
@ blindmeis:我的意思是** 1 => **按类型分组(并在ComboBox的'Persons中加载'PersonTypes'的清单),** 2 => **过滤基于DataGrid的在'ComboBox'中选择的'PersonType'上 – Mohsen 2012-07-26 08:51:33