在listview wpf C#donds'中隐藏列表视图项;行不通

在listview wpf C#donds'中隐藏列表视图项;行不通,c#,wpf,listview,C#,Wpf,Listview,我有以下ListView,其中包含以下XAML定义: <ListView Height="307" Width="991" Name="OrderListView" ItemsSource="{ Binding Orders }"> <ListView.ItemContainerStyle> <Style TargetType="ListViewItem"> <

我有以下
ListView
,其中包含以下XAML定义:

<ListView Height="307" Width="991" Name="OrderListView" ItemsSource="{ Binding Orders }">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=isVisible}" Value="False">
                            <Setter Property="Visibility" Value="Collapsed"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="A header" DisplayMemberBinding="{Binding Path=StoreNumber}"></GridViewColumn>
                    ...
                </GridView>
            </ListView.View>
        </ListView>
ListView未刷新,触发器不工作,某些项未隐藏

但是
\u backup
包含的项目很少
可见
设置为false

我的错在哪里


备注:
订单
不为null或空,在初始化窗口时从数据库加载。listview也不是空的,包含很少的记录(行)。

首先,为类
顺序
实现接口
INotifyPropertyChanged
(或实现该接口的基类)。使用界面提供的
OnPropertyChanged
功能正确设置属性。这是必需的,因为当列表中某项的实例发生更改时,您的ObservableCollection
Orders
不会收到通知

这可能如下所示:

class Order : INotifyPropertyChanged
{
    // Boilerplate code..

    private bool _Visible ;

    public bool Visible
    {
        get { return _Visible; }
        set
        {
            if (_Visible == value) return;
            _Visible = value;
            OnPropertyChanged(() => _Visible);
        }
    }
}
此外,您应该为ObservableCollection
订单实施相同的功能


您的TrutGeError应该在“代码>可见的//COD>属性更改时被激发。

您是否考虑简单地在基础集合视图上设置筛选器?根据您编写的内容,您可以消除触发器并在代码中处理过滤。您能否仅向我展示listview.datacontext的清晰文档?我发现datagridIt主要与数据上下文无关;在本例中,您将获取_backup.Orders的集合视图源,并将其强制转换到ListCollectionView中,然后在其上设置过滤器。非常直截了当。您甚至可以使用匿名委托。我在这里写了wiki标签,如果有用的话,
OnPropertyChanged的定义是什么
private void OrderSearch_KeyUp(object sender, KeyEventArgs e)
{
    _backup = this.DataContext as DDModel;

    string keyword = this.OrderSearch.Text;

    var query = _backup.Orders.ToList();

    // make them all visible
    query.ForEach(p => p.isVisible = true);

    if (!string.IsNullOrWhiteSpace(keyword))
    {
        //then hide the items which doesn't match with keyword
        query.Where(p => !p.OrderNumber.ToString().StartsWith(keyword)).ToList().ForEach(p => p.isVisible = false);
    }
}
class Order : INotifyPropertyChanged
{
    // Boilerplate code..

    private bool _Visible ;

    public bool Visible
    {
        get { return _Visible; }
        set
        {
            if (_Visible == value) return;
            _Visible = value;
            OnPropertyChanged(() => _Visible);
        }
    }
}