MVVM - DataGrid不使用ErrorDataInfo显示错误

时间:2016-05-26 14:57:20

标签: c# mvvm error-handling datagrid

在我的WPF应用程序中,使用MVVM Light,我使用DataGrid来显示特定对象集合中的数据。

根据要求,我在第一个列表中分隔了标题,在另一个列表中分隔了完整的对象集合。

在阅读了大量教程,帖子,博客后......似乎必须将ErrorDataInfo放在ViewModel中来管理模型属性错误。

在这里,尝试一下,我想在代码中看到一个非常基本的错误。

应用程序进程是用户选择csv文件,此文件将转换为我的对象集合,然后显示在DataGrid中。此时应显示错误状态的单元格(以及工具提示中的错误消息)。

我尝试了很多东西,但我的DataGrid仍然没有显示错误的单元格。

这是我的ViewModel代码:

 public class ImportViewModel : ViewModelBase, IDataErrorInfo
            {       
                #region Validation
                public string Error
                {
                    get
                    {
                        return string.Empty;
                    }
                }

                public string this[string columnName]
                {
                    get
                    {
                        string result = null;

                        if (null != ListOfObjects)
                        {
                            if (_imp.ListOfHeaders.Where(x => x.Name == "EAN Code")
                                 .ToString() == columnName)
                                if (ListOfObjects.Select(x => x.ean_cod).Single().Length > 3)
                                    result = "Code must not be more than 3 digits";
                        }
                        return result;
                    }
                }

我的View xaml代码

 <DataGrid Grid.Row="1"
              AutoGenerateColumns="True"
              ItemsSource="{Binding ListOfObjects, 
              Mode=TwoWay, 
              UpdateSourceTrigger=PropertyChanged, 
              ValidatesOnExceptions=True, 
              NotifyOnValidationError=True}">

                    <DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Style.Triggers>
                                <Trigger Property="Validation.HasError" Value="true">
                                    <Setter Property="ToolTip"
                                Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
                                Path=(Validation.Errors)[0].ErrorContent}"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </DataGrid.RowStyle>

                 </DataGrid>
            </Grid>

感谢您的帮助。

0 个答案:

没有答案