ObservableCollection и IDataErrorInfo с файлом XML - PullRequest
2 голосов
/ 11 марта 2011

MainWindow () и GetXmlData () работают нормально и отображают xmlfile в gridview. Но когда я включаю класс XmlNode: IDataErrorInfo, он перестает работать.

Мне нравится, чтобы все они работали для отображения и проверки вида сетки. Кто-нибудь может заметить все, что я скучаю? Или объяснение, я тут останавливаюсь. Это похоже на ошибку между наблюдаемой коллекцией.

    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;
            }
        }
    }

1 Ответ

0 голосов
/ 14 марта 2011

Ваша реализация Error в IDataErrorInfo вызывает исключение.Механизм связывания WPF, скорее всего, вызывает это, чтобы определить, есть ли какие-либо ошибки на уровне экземпляра, а предоставленный вами индексатор this[string columnName] возвращает ошибки уровня свойств.

This ...

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

... была бы лучшей альтернативой!

Я могу ошибаться ... но попробуйте поставить точку на оператор throw new NotImplementedException() и посмотреть, что произойдет!

...