【问题标题】:C# WPF MVVM column filtering use of textboxesC# WPF MVVM 列过滤使用文本框
【发布时间】:2019-07-16 21:01:02
【问题描述】:

在 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;   
    }

我尝试使用的原始代码:

 string[] ColumnFilter = new[] { Filterbox1, Filterbox2, Filterbox3, Filterbox4, Filterbox5, Filterbox6, Filterbox7, Filterbox8, Filterbox9, Filterbox10, Filterbox11, Filterbox12, Filterbox13, Filterbox14, Filterbox15, Filterbox16 };

 _dataGridModel.DataTableMergeren = new DataView(MainTable).ToTable(false, ColumnFilter);

【问题讨论】:

    标签: c# wpf validation mvvm datatable


    【解决方案1】:

    当你初始化你的 TextBoxes 时,你应该做类似 Filterbox1.Text = String.Empty 或类似的事情。这应该允许您在不出错的情况下引用它们(并且不必进行空检查)。

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

    【讨论】:

    • 在使用MVVM模式时,不允许直接指向视图中的Filterbox来预定义文本框。程序启动时字符串已经绑定,但是在获取事件列时字符串(文本框)为空。从用户输入获取数据时,定义内容的是 XAML。我没有在 XAML 中看到任何快速将其在启动时预定义为空的内容。使用 TargetNullValue='' 也无济于事。
    【解决方案2】:

    也许最好的方法是使用这样的东西:

    public List<string> FilterList(string[] FilterBoxes)
        {
            List<string> R = FilterBoxes.Where(x => String.IsNullOrWhiteSpace(x) == false).ToList<string>();
            return R;
        }
    

    【讨论】:

    • 非常感谢!将其更改为: public string[] FilterList(string[] FilterBoxes ) { string[] R = FilterBoxes.Where(x => String.IsNullOrWhiteSpace(x) == false).ToArray();返回 R; }
    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2017-04-26
    相关资源
    最近更新 更多