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