验证来自另一个

时间:2016-10-13 00:58:50

标签: c# wpf validation mvvm

我有一个带有组合框(UC1)的用户控件,我有另一个用户控件,一个文本框有两个按钮(UC2)。

我在MainWindow上放了一个UC2实例。我也需要在MainWindow上放置5个UC1实例。

UC2将允许用户浏览文本(CSV)文件。浏览文件后,将在每个Combobox中填充所有列名称(使用MVVMFoundation的Messenger类)。

然后我对每个Combobox视图模型进行验证,以防止用户选择两次相同的列名。我可以使用IDataErrorInfo进行单独验证 例如:当ComboBox1已选择ColA时,如果ComboBox2也选择了ColA,ComboBox2将具有验证错误触发器,并将显示带工具提示的红色边框。

但是当我将ComboBox1更改为ColB时,ComboBox2应该清除验证错误(通过正常逻辑)。问题是我不知道如何从ComboBox1 View Model中清除ComboBox2的错误。

我的尝试:
1.每次一个combobx得到验证检查时,我都尝试向所有已注册的组合框视图模型发送消息(但它会继续进入嵌套循环)。所以,我放弃了。
2.(不知道我怎样才能实现它)。

这是我的Combobox View Model的代码。

    public string this[string columnName]
    {
        get 
        {
            string result = string.Empty;
            switch (columnName)
            {
                case "SelectedObject": result = CheckData(); break;
            }

            return result;
        }
    }

    private string CheckData()
    {
        if (_menu == 1)
        {
            if (App.myExport1.chosenCols.ContainsValue(_selectedObject.ColIndex))
            {
                if (App.myExport1.chosenCols.ContainsKey(_colNo))
                    App.myExport1.chosenCols[_colNo] = _selectedObject.ColIndex;
                else
                    App.myExport1.chosenCols.Add(_colNo, _selectedObject.ColIndex);

                return "Column name already chosen!";
            }
            else
            {
                if (App.myExport1.chosenCols.ContainsKey(_colNo))
                    App.myExport1.chosenCols[_colNo] = _selectedObject.ColIndex;
                else
                    App.myExport1.chosenCols.Add(_colNo, _selectedObject.ColIndex);

                return null;
            }
        }
        else if (_menu == 2)
            return null;
        else if (_menu == 3)
            return null;
        else if (_menu == 4)
            return null;
        else
            return null;
    }

这是我的ComboBox XAML代码。

<ComboBox Grid.Row="1" Grid.Column="1" Name="cboCol"
              ItemsSource="{Binding Masters}" SelectedValuePath="{Binding ColIndex}" 
              SelectedItem="{Binding SelectedObject,ValidatesOnDataErrors=True}"
              DisplayMemberPath="ColName" ToolTip="{Binding RelativeSource={RelativeSource self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />

关于如何实现它的任何建议/指南?
请不要介意我上面的代码,如果它不是正确的MVVM方式,虽然我说我正在使用MVVM方法(我只是开始尝试使用MVVM方法,但仍然不熟悉它)。

更新
从“Jai”获得反馈后,我理解并注意到在用户控制中使用单一控件的错误方法。请原谅我新手做事的方式。会考虑结案。

0 个答案:

没有答案