相关疑难解决方法(0)

使用Josh Smith的WPF MVVM演示应用程序实现ListView过滤器

我一直在尝试扩展Josh Smith的演示MVVM应用程序,以便更好地理解它背后的原理,并且当我尝试使用ListView在View上实现过滤器功能时,我遇到了障碍.

我花了几个小时研究和涉猎,但它只是没有用.

我的第一步是将视图中的文本框绑定到ViewModel中的属性:

<TextBox Height="25" Name="txtFilter" Width="150" Text="{Binding Path=Filter, UpdateSourceTrigger=PropertyChanged}"/>
Run Code Online (Sandbox Code Playgroud)

这在我的VM中匹配:

public string Filter
    {
        get { return this.filter; }
        set
        {
            this.filter = value;
            OnFilterChanged();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的VM使用ObservableCollection作为数据源,但我在阅读教程后尝试将其转换为ICollectionView:

internal ObservableCollection<StaffViewModel> InnerStaff { get; set; }
    internal CollectionViewSource CvsStaff { get; set; }
    public ICollectionView AllStaff
    {
        get { return CvsStaff.View; }
    }
Run Code Online (Sandbox Code Playgroud)

在我的构造函数中,我指定:

CvsStaff = new CollectionViewSource();
CvsStaff.Source = this.InnerStaff;
CvsStaff.Filter += ApplyFilter;
Run Code Online (Sandbox Code Playgroud)

当我的Filter属性更新时,它调用OnFilterChanged,它是:

private void OnFilterChanged()
    {
        CvsStaff.View.Refresh();
    }
Run Code Online (Sandbox Code Playgroud)

我的ApplyFilter函数是:

void ApplyFilter(object sender, FilterEventArgs e)
    {
        StaffViewModel …
Run Code Online (Sandbox Code Playgroud)

c# wpf listview mvvm

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

listview ×1

mvvm ×1

wpf ×1