C# xaml中的组合框数据过滤

C# xaml中的组合框数据过滤,c#,wpf,xaml,.net-4.5,C#,Wpf,Xaml,.net 4.5,我使用的是Telerik组合框,但我认为这个问题与标准wpf组合框有关。控件绑定到“TableRecord”的可观察集合,其中该对象如下所示: public enum RecordState { Orginal, Added, Modified, Deleted } public class TableRecord<T> { public Guid Id { get; set; } public string DisplayName { get; set;

我使用的是Telerik组合框,但我认为这个问题与标准wpf组合框有关。控件绑定到“TableRecord”的可观察集合,其中该对象如下所示:

public enum RecordState
{
    Orginal, Added, Modified, Deleted
}

public class TableRecord<T> 
{
    public Guid Id { get; set; }
    public string DisplayName { get; set; }
    public T Record { get; set; }
    public RecordState State { get; set; }

    public TableRecord(Guid id, string displayName, T record, RecordState state)
    {
        Id = id;
        DisplayName = displayName;
        Record = record;
        State = state;
    }
}
private ObservableCollection<TableRecord<T>> _recordCollection = new ObservableCollection<TableRecord<T>>();
public ObservableCollection<TableRecord<T>>  Commands 
{
    get
    {
           return _recordCollection;
    }
}
<telerik:RadComboBox ItemsSource="{Binding Commands}" DisplayMemberPath="DisplayName" SelectedValuePath="Id" Height="22" SelectedItem="{Binding SelectedCommand, Mode=TwoWay}" />
公共枚举记录状态
{
原始、添加、修改、删除
}
公开课表格记录
{
公共Guid Id{get;set;}
公共字符串DisplayName{get;set;}
公共T记录{get;set;}
公共记录状态{get;set;}
公共TableRecord(Guid id、字符串displayName、T记录、记录状态)
{
Id=Id;
DisplayName=DisplayName;
记录=记录;
状态=状态;
}
}
这些“表格记录”是这样保存和公开的:

public enum RecordState
{
    Orginal, Added, Modified, Deleted
}

public class TableRecord<T> 
{
    public Guid Id { get; set; }
    public string DisplayName { get; set; }
    public T Record { get; set; }
    public RecordState State { get; set; }

    public TableRecord(Guid id, string displayName, T record, RecordState state)
    {
        Id = id;
        DisplayName = displayName;
        Record = record;
        State = state;
    }
}
private ObservableCollection<TableRecord<T>> _recordCollection = new ObservableCollection<TableRecord<T>>();
public ObservableCollection<TableRecord<T>>  Commands 
{
    get
    {
           return _recordCollection;
    }
}
<telerik:RadComboBox ItemsSource="{Binding Commands}" DisplayMemberPath="DisplayName" SelectedValuePath="Id" Height="22" SelectedItem="{Binding SelectedCommand, Mode=TwoWay}" />
private ObservableCollection\u recordCollection=new ObservableCollection();
公共可观察收集命令
{
得到
{
返回-记录收集;
}
}
我的xaml如下所示:

public enum RecordState
{
    Orginal, Added, Modified, Deleted
}

public class TableRecord<T> 
{
    public Guid Id { get; set; }
    public string DisplayName { get; set; }
    public T Record { get; set; }
    public RecordState State { get; set; }

    public TableRecord(Guid id, string displayName, T record, RecordState state)
    {
        Id = id;
        DisplayName = displayName;
        Record = record;
        State = state;
    }
}
private ObservableCollection<TableRecord<T>> _recordCollection = new ObservableCollection<TableRecord<T>>();
public ObservableCollection<TableRecord<T>>  Commands 
{
    get
    {
           return _recordCollection;
    }
}
<telerik:RadComboBox ItemsSource="{Binding Commands}" DisplayMemberPath="DisplayName" SelectedValuePath="Id" Height="22" SelectedItem="{Binding SelectedCommand, Mode=TwoWay}" />

我想做的是更改xaml(如果可能的话),以便它显示集合中除“State”值设置为“Deleted”的项之外的所有项


我有一个想法,我可能可以使用数据触发器来实现这一点,因为我过去曾使用数据触发器根据内容设置文本颜色,但我不确定是否可以按需要的方式进行过滤。

最好的方法是使用CollectionViewSource进行过滤。在资源中定义集合视图源并为其设置键

<Window.Resources>
    <CollectionViewSource Source="{Binding Commands}" x:Key="source"/>
</Window.Resources>
<Grid>
    <ComboBox VerticalAlignment="Center" HorizontalAlignment="Center" Width="200" 
              ItemsSource="{Binding Source={StaticResource source}}"
              DisplayMemberPath="DisplayName"/>
</Grid>

谢谢你。我使用您的代码作为我的代码的基础,因为我需要以mvvm的方式来完成它。我使用了“CollectionViewSource”和“ICollectionView”,过滤效果很好。谢谢你的建议。