ObservableCollection 和 IDataErrorInfo 以及 XML 文件
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您在
IDataErrorInfo
中实现Error
会引发异常。 WPF 绑定机制很可能调用此方法来确定是否存在任何实例级错误,而您提供的this[string columnName]
索引器则返回属性级错误。这……
会是一个更好的选择!
我可能是错的...但是尝试在
throw new NotImplementedException()
语句上设置断点,看看会发生什么!Your implementation of
Error
inIDataErrorInfo
is throwing an exception. The WPF binding mechanism is most likely calling this to determine if there are any instance-level errors, whereas thethis[string columnName]
indexer you have provided is returning property-level errors.This...
... would be a better alternative!
I could be wrong... but try breakpointing the
throw new NotImplementedException()
statement and see what happens!