ObservableCollection 和 IDataErrorInfo 以及 XML 文件

发布于 2024-10-21 05:04:01 字数 1861 浏览 9 评论 0原文

MainWindow() 和 GetXmlData() 工作正常并在 gridview 上显示 xmlfile。但是当我包含 XmlNode :IDataErrorInfo 类时,它停止工作。

我喜欢让它们全部工作来显示和验证网格视图。有人能发现我错过的任何东西吗?或者解释一下,我就在这里停下来。这似乎是 observablecollection 之间的错误。

    public MainWindow()
    {
        InitializeComponent();
        RadGridView testGrid = new RadGridView();
        testGrid.ItemsSource = GetXmlData();
        testGrid.AutoGenerateColumns = false;
        GridViewDataColumn col1 = new GridViewDataColumn();
        col1.DataMemberBinding = new Binding("JobKey") { 
        ValidatesOnDataErrors = true, NotifyOnValidationError = true };                      
        testGrid.Columns.Add(col1);
        LayoutRoot.Children.Add(testGrid);                 
   }

    private static object GetXmlData()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"c:\\JobSetupFile.xml");

        XmlDataProvider provider = new XmlDataProvider();
        provider.IsAsynchronous = false;
        provider.Document = doc;
        provider.XPath = "JobSetup/JobParameters";

        return new ObservableCollection<XmlNode>((IEnumerable<XmlNode>)provider.Data);
    }

    public class XmlNode : IDataErrorInfo
    {
        public string JobKey { get; set; }

        public XmlNode()
        {

        }

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string columnName]
        {
            get
            {
                string result = string.Empty;
                if (columnName.Equals("JobKey"))
                {
                    if (JobKey.Where(s => Char.IsLetter(s)).Count() != JobKey.Length)
                        result = "Invalid name format. Name should contain letters only";
                }
             return result;
            }
        }
    }

MainWindow() and GetXmlData() work fine and display the xmlfile on gridview. But when I include the XmlNode :IDataErrorInfo class, it stops working.

I like to get all of them to work to display and validate the gridview. Anyone could spot anything I miss? Or explanation, I'm hitting a stop here. It seems like an error between observablecollection.

    public MainWindow()
    {
        InitializeComponent();
        RadGridView testGrid = new RadGridView();
        testGrid.ItemsSource = GetXmlData();
        testGrid.AutoGenerateColumns = false;
        GridViewDataColumn col1 = new GridViewDataColumn();
        col1.DataMemberBinding = new Binding("JobKey") { 
        ValidatesOnDataErrors = true, NotifyOnValidationError = true };                      
        testGrid.Columns.Add(col1);
        LayoutRoot.Children.Add(testGrid);                 
   }

    private static object GetXmlData()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"c:\\JobSetupFile.xml");

        XmlDataProvider provider = new XmlDataProvider();
        provider.IsAsynchronous = false;
        provider.Document = doc;
        provider.XPath = "JobSetup/JobParameters";

        return new ObservableCollection<XmlNode>((IEnumerable<XmlNode>)provider.Data);
    }

    public class XmlNode : IDataErrorInfo
    {
        public string JobKey { get; set; }

        public XmlNode()
        {

        }

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string columnName]
        {
            get
            {
                string result = string.Empty;
                if (columnName.Equals("JobKey"))
                {
                    if (JobKey.Where(s => Char.IsLetter(s)).Count() != JobKey.Length)
                        result = "Invalid name format. Name should contain letters only";
                }
             return result;
            }
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我一向站在原地 2024-10-28 05:04:01

您在 IDataErrorInfo 中实现 Error 会引发异常。 WPF 绑定机制很可能调用此方法来确定是否存在任何实例级错误,而您提供的 this[string columnName] 索引器则返回属性级错误。

这……

public string Error
{
   get { return string.Empty; }
}

会是一个更好的选择!

我可能是错的...但是尝试在 throw new NotImplementedException() 语句上设置断点,看看会发生什么!

Your implementation of Error in IDataErrorInfo is throwing an exception. The WPF binding mechanism is most likely calling this to determine if there are any instance-level errors, whereas the this[string columnName] indexer you have provided is returning property-level errors.

This...

public string Error
{
   get { return string.Empty; }
}

... would be a better alternative!

I could be wrong... but try breakpointing the throw new NotImplementedException() statement and see what happens!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文