ObservableCollection и IDataErrorInfo с файлом XML
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 ответ
Ваша реализация Error
в IDataErrorInfo
бросает исключение. Механизм связывания WPF, скорее всего, вызывает это, чтобы определить, есть ли какие-либо ошибки на уровне экземпляра, тогда как this[string columnName]
предоставленный вами индексатор возвращает ошибки на уровне свойств.
Это...
public string Error
{
get { return string.Empty; }
}
... будет лучшей альтернативой!
Я могу ошибаться... но попробуйте throw new NotImplementedException()
Скажите и посмотрите что получится!