首页 > 解决方案 > 基于 TextBoxes 和 CheckBoxes MVVM 过滤 WPF DataGrid

问题描述

我希望让它自己工作,但看起来我仍然缺少一些东西。我有 4 个用于过滤 WPF DataGrid 的文本框。除了它们之外,我还有 2 个复选框。

目前我没有收到任何错误,但是

  1. 我只能选中 CheckBox,不能取消选中。

在此处输入图像描述

  1. 如果两个复选框都被选中=“应用过滤器”并且值被输入到 YRNRO“应用更多过滤器”=“输入值”到其他文本框什么都不做。过滤器是否因此而变得混乱?

         string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Like '7%'" : "";
    
         this.MainDataTable.DefaultView.RowFilter =
           $"YRNRO LIKE '{this.YRNROSearchKey}*'" +
           ACTIVEBoolquery;
    

我想在里面有 CheckBox 过滤器,EnableRowFiltering以覆盖在加载数据之前检查 CheckBoxes 的情况。所以我可以检查CheckBox,然后EnableRowFiltering在加载数据后通过调用将数据加载到DataGrid。

MainWindow.xaml:

    <!--CHECKBOXES-->

    <CheckBox Style="{StaticResource MyCheckBox}" IsChecked="{Binding ACTIVEBool}" x:Name="ActiveCustomer" Content="" HorizontalAlignment="Left" Margin="128,55,0,0" VerticalAlignment="Top"/>
    <CheckBox Style="{StaticResource MyCheckBox}" IsChecked="{Binding FIANDSEBool}" x:Name="OnlyFIandSE" Content="" HorizontalAlignment="Left" Margin="24,54,0,0" VerticalAlignment="Top"/>

这是我当前的代码 ViewModel.cs:

    // Binding checkbox FIANDSE Bool
    private bool _FIANDSEBool;
    public bool FIANDSEBool
    {
        get => this._FIANDSEBool;
        set
        {
            this._FIANDSEBool = true;
            OnPropertyChanged();

            // Refresh the DataTable filter expression
            EnableRowFiltering();
        }
    }

    // Binding checkbox ACTIVE Bool
    private bool _ACTIVEBool;
    public bool ACTIVEBool
    {
        get => this._ACTIVEBool;
        set
        {
            this._ACTIVEBool = true;
            OnPropertyChanged();

            // Refresh the DataTable filter expression
            EnableRowFiltering();
        }
    }

    public void EnableRowFiltering()
    {
        string FIANDSEBoolquery = FIANDSEBool ? "AND KAYTOSSA LIKE '%1%'" : "";
        string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Like '7%'" : "";

        this.MainDataTable.DefaultView.RowFilter =
          $"YRNRO LIKE '{this.YRNROSearchKey}*'" +
          $"AND HAKUNIMI LIKE '{this.HAKUNIMISearchKey}*'" +
          $"AND KONSERNI LIKE '{this.GROUPSearchKey}*'" +
          $"AND LY LIKE '{this.BUSINESSIDSearchKey}*'" +
          FIANDSEBoolquery + ACTIVEBoolquery;
    }

标签: c#wpfxamlmvvm

解决方案


作业

this._FIANDSEBool = true;

this._ACTIVEBool = true;

在属性设置器中显然是错误的。

他们应该改用value关键字:

public bool FIANDSEBool
{
    get => _FIANDSEBool;
    set
    {
        _FIANDSEBool = value; // here
        OnPropertyChanged();
        EnableRowFiltering();
    }
}

推荐阅读