wpf - 选择空白行时 DataGrid 上出现意外的红色边框(验证错误)

标签 wpf validation data-binding mvvm

当我选择(通过单击或通过键盘)我的 DataGrid 上的空白行(当我想添加新行时)时,会发生意外的验证错误(但无一异常(exception)) - 数据网格的边框变为红色,如您所见下图。当我第二次单击空白行时,红色边框消失。其他一切正常,添加了新行。此外,我没有任何验证规则。当我用空文本创建一行时,值是有效的。

我不想要这种行为和这个红色边框,任何人都知道,为什么会发生这种情况以及如何解决它?为什么以及在哪里验证失败?

enter image description here

下面我附上一些源代码:

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/

相关文章:

ruby-on-rails - 仅验证数字

c# - 更改 numericUpDown 上的数字时数据绑定(bind)失败

vb.net - 如何将属性数据绑定(bind)到 Wpf 中的文本框

android - 在绑定(bind)适配器上传递 View ID?

c# - 将 CustomControl 绑定(bind)到自己的属性

c# - 在运行时添加图像

Javascript 验证文件输入名称

codeigniter:当出现表单验证错误时更改 html 类?

c# - 如何在 MVVM 模式中正确实现模型和 View 模型

wpf - 更改 UserControl 文件中的命名空间后,...g.cs 文件出现错误