当我选择(通过单击或通过键盘)我的 DataGrid 上的空白行(当我想添加新行时)时,会发生意外的验证错误(但无一异常(exception)) - 数据网格的边框变为红色,如您所见下图。当我第二次单击空白行时,红色边框消失。其他一切正常,添加了新行。此外,我没有任何验证规则。当我用空文本创建一行时,值是有效的。
我不想要这种行为和这个红色边框,任何人都知道,为什么会发生这种情况以及如何解决它?为什么以及在哪里验证失败?
下面我附上一些源代码:
xaml 中的 DataGrid 定义:
<DataGrid IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"
ItemsSource="{Binding Path=ConfigFiles}" SelectedItem="{Binding Path=SelectedConfigFile}"
Grid.Column="1" Height="87" Margin="0,26,11,32" Style="{DynamicResource DataGridStyle}">
<DataGrid.Columns>
<DataGridTextColumn Width="1*" Binding="{Binding Name}" />
</DataGrid.Columns>
</DataGrid>
我的 ViewModel 的部分:
public class ManageModulesVM : BaseVM // Implements INotifyPropertyChanged
{
// ...
public ObservableCollection<ConfigFile> ConfigFiles
{
get { return selectedModule == null ? null : selectedModule.ConfigFiles; }
set
{
selectedModule.ConfigFiles = value;
OnPropertyChanged(() => ConfigFiles);
}
}
public ConfigFile SelectedConfigFile
{
get { return selectedModule == null ? null : selectedModule.SelectedConfigFile; }
set
{
if (value != null)
{
selectedModule.SelectedConfigFile = value;
}
OnPropertyChanged(() => SelectedConfigFile);
OnPropertyChanged(() => Parameters);
}
}
// ...
}
配置文件类:
public class ConfigFile
{
public string Name { get; set; }
public IList<Parameter> Parameters { get; set; }
public ConfigFile() { Name = ""; Parameters = new List<Parameter>(); }
}
编辑:
经过进一步调查,我知道 SelectedItem Binding 导致问题(当我删除此绑定(bind)时,验证错误停止出现),但我仍然不知道为什么以及如何解决这个问题。
最佳答案
要了解原因,当您在 Debug模式下单击 DataGrid 的新行时,请查看调试窗口。有第一条异常消息可以让您了解问题发生的原因。
是的,问题出在类型转换上。您需要将 SelectedItem 的类型修改为对象类型,如下所示。
public class ManageModulesVM : BaseVM // Implements INotifyPropertyChanged
{
// ...
public object SelectedConfigFile
{
get { return selectedModule == null ? null : selectedModule.SelectedConfigFile; }
set
{
if (value != null)
{
selectedModule.SelectedConfigFile = value;
}
OnPropertyChanged(() => SelectedConfigFile);
OnPropertyChanged(() => Parameters);
}
}
// ...
}
关于wpf - 选择空白行时 DataGrid 上出现意外的红色边框(验证错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7697973/