我有一个带有组合框(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”获得反馈后,我理解并注意到在用户控制中使用单一控件的错误方法。请原谅我新手做事的方式。会考虑结案。