Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF MVVM列过滤文本框的使用_C#_Wpf_Validation_Mvvm_Datatable - Fatal编程技术网

C#WPF MVVM列过滤文本框的使用

C#WPF MVVM列过滤文本框的使用,c#,wpf,validation,mvvm,datatable,C#,Wpf,Validation,Mvvm,Datatable,在MVVM模式中,我将16个不同的字符串绑定到16个用于筛选列的文本框,每个文本框在创建时都分配了propertychanged。该逻辑失败,因为在运行时,剩余字段仍默认为空。我想忽略空字段。如果我填写列表中的每一个字段,那么它就会按预期工作 我想要什么:如果用户随机选择框1、5和15来填充文本,那么它应该只选择那些用于过滤的文本,而忽略其余的空文本。如果用户没有填写任何内容,则应继续显示整个表 我尝试的内容:我尝试获取所有字段并设置!=”“还有在添加到列表之前为null,然后将列表类型作为字符

在MVVM模式中,我将16个不同的字符串绑定到16个用于筛选列的文本框,每个文本框在创建时都分配了propertychanged。该逻辑失败,因为在运行时,剩余字段仍默认为空。我想忽略空字段。如果我填写列表中的每一个字段,那么它就会按预期工作

我想要什么:如果用户随机选择框1、5和15来填充文本,那么它应该只选择那些用于过滤的文本,而忽略其余的空文本。如果用户没有填写任何内容,则应继续显示整个表

我尝试的内容:我尝试获取所有字段并设置!=”“还有在添加到列表之前为null,然后将列表类型作为字符串返回以进行筛选。做一个foreach也无济于事。请参见下面的示例:

public List<String> FilterList()
    {

        List<String> filters = new List<string>();

        if (!Filterbox1.Equals("") && !Filterbox1.Equals(null))
        {
            filters.Add(Filterbox1);
        }

        if (!Filterbox2.Equals("") && !Filterbox2.Equals(null))
        {
            filters.Add(Filterbox2);
        }

        return filters;   
    }

也许最好的方法是使用以下内容:

public List<string> FilterList(string[] FilterBoxes)
    {
        List<string> R = FilterBoxes.Where(x => String.IsNullOrWhiteSpace(x) == false).ToList<string>();
        return R;
    }
公共列表过滤器列表(字符串[]过滤器盒)
{
List R=FilterBoxes.Where(x=>String.IsNullOrWhiteSpace(x)==false.ToList();
返回R;
}

初始化文本框时,应该执行类似Filterbox1.Text=String.Empty或类似操作。这应该允许您引用它们而不会出现错误(并且不必进行空检查)


然而,这仍然不能解决代码效率问题。我建议学习用户控件,并在程序启动时运行循环创建16个。然后,您可以避免16个基本相同的文本框具有唯一名称。

在使用MVVM模式时,不允许通过直接指向视图中的过滤器框来预定义文本框。当程序启动时,字符串已经绑定,但是当获取事件上的列时,字符串(textbox)为空。当从用户输入获取数据时,定义内容的是XAML。我还没有在XAML中看到任何快速的、在启动时将其预先定义为空的东西。使用TargetNullValue=''也没有帮助。非常感谢!将其更改为:public string[]FilterList(string[]FilterBoxes){string[]R=FilterBoxes.Where(x=>string.IsNullOrWhiteSpace(x)==false.ToArray();返回R;}
public List<string> FilterList(string[] FilterBoxes)
    {
        List<string> R = FilterBoxes.Where(x => String.IsNullOrWhiteSpace(x) == false).ToList<string>();
        return R;
    }