有人可以帮助我,为什么我的列表框是空的?
XmlDocument包含以下XML:
<Config>
<Tabs>
<Tab Name="Test1" />
<Tab Name="Test2" />
</Tabs>
</Config>
在我的XAML文件中,我尝试了以下
<Window>
<Grid>
<ListBox DataContext="{Binding {StaticResource Data}, XPath=//Tabs}" ItemsSource="{Binding XPath=Tab/@Name}">
</ListBox>
</Grid>
<Window>
我知道我没有设置绑定到name属性但是如果每个Tab节点都工作,它不应该显示XmlDocument.XmlNode.ToString()吗?
我的C#构造函数代码背后:
InitializeComponent();
this.doc = new XmlDocument();
doc.LoadXml(config.document.OuterXml);
XmlDataProvider provider = (XmlDataProvider)Resources["Data"];
provider.Document = doc;
provider.Refresh();
config.document.OuterXml
是包含上述xml的有效文档。
我使用Collections处理过程代码,但我一直试图弄清楚如何直接绑定到XML。
更新:ListBox为空
现在没有绑定错误,但我的列表框是空的,我已经仔细检查了我的XML文件,甚至做了MessageBox.Show(provider.Document.OuterXML)并且可以确认XmlDocument确实有正确的节点
提前致谢
答案 0 :(得分:4)
如果您将XmlDataProvider
的{{1}}属性设置为Document
,则会在XmlDocument
事件被引发时刷新绑定。由于XmlNode.NodeChanged
不是依赖属性,因此无法绑定它,因此必须在代码中设置它;这应该可以解决问题:
在您的XAML中:
Document
在窗口的构造函数中:
<Window.Resources>
<XmlDataProvider x:Key="Data"/>
</Window.Resources>
...
<ListBox
DataContext="{Binding {StaticResource Data}, XPath=Config/Tabs}"
ItemsSource="{Binding XPath=Tab/@Name}"/>
现在,您对InitializeComponent();
XmlDocument d = new XmlDocument();
d.Load("MyData.xml");
XmlDataProvider p = (XmlDataProvider)Resources["Data"];
p.Document = d;
所做的任何更改都会反映在XmlDocument
中。
修改强>
我不能告诉你你做错了什么,但也许你能够将你正在做的事情与下面的事情进行比较,这是一个完整的工作示例。
Window1.xaml:
ListBox
Window1.xaml.cs:
<Window x:Class="Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="Data"/>
</Window.Resources>
<ListBox
DataContext="{Binding Source={StaticResource Data}, XPath=Config}"
ItemsSource="{Binding XPath=Tabs/Tab/@Name}"/>
</Window>