C# 基于文本框和复选框MVVM筛选WPF数据网格

C# 基于文本框和复选框MVVM筛选WPF数据网格,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我本来希望自己能让它工作的,但看起来我还是错过了一些东西。我有4个文本框用于过滤WPF数据网格。除此之外,我还有两个复选框 目前我没有收到任何错误,但是 我只能选中复选框,不能取消选中 如果选中这两个复选框=“应用的过滤器”并将值输入到YRNRO“应用更多过滤器”=“输入值”到其他文本框,则不会产生任何效果。过滤器是否因此而变得混乱 string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Lik

我本来希望自己能让它工作的,但看起来我还是错过了一些东西。我有4个文本框用于过滤WPF数据网格。除此之外,我还有两个复选框

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

  • 我只能选中复选框,不能取消选中
  • 如果选中这两个复选框=“应用的过滤器”并将值输入到YRNRO“应用更多过滤器”=“输入值”到其他文本框,则不会产生任何效果。过滤器是否因此而变得混乱

         string ACTIVEBoolquery = ACTIVEBool ? "AND YRNRO Like '6%' OR YRNRO Like '7%'" : "";
    
         this.MainDataTable.DefaultView.RowFilter =
           $"YRNRO LIKE '{this.YRNROSearchKey}*'" +
           ACTIVEBoolquery;
    
  • 我希望在
    中设置复选框过滤器,启用rowFiltering
    以覆盖在加载数据之前选中复选框的情况。因此,我可以选中复选框,然后在加载数据后通过调用
    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"/>
    
    作业

    this._FIANDSEBool = true;
    

    在属性设置中,设置者显然是错误的

    他们应该使用
    关键字:

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

    您应该使用equals(double
    ==
    )运算符来比较值:
    \u fian和sebool==true
    。它是如何崩溃的?异常消息说什么?
    FIANDSEBool==true
    是一个冗余的比较。只需编写
    FIANDSEBool?“”:…
    。我认为WPF中的复选框可以为空(选中、未选中和未定义),因此您可能需要将它们绑定到bool?而不是布尔。当你勾选/取消勾选该复选框时,你的财产是否被击中?在其中放置断点以确保绑定正常工作。文本框可以工作吗?只有复选框不起作用吗?在
    之前添加一些空格,比如
    “和kaytosa”
    。@hatman:“不能取消选中”是什么意思?
    this._ACTIVEBool = true;
    
    public bool FIANDSEBool
    {
        get => _FIANDSEBool;
        set
        {
            _FIANDSEBool = value; // here
            OnPropertyChanged();
            EnableRowFiltering();
        }
    }