我想在TreeView中显示一些xml数据。 Xml数据由ViewModel的XmlDataProvider类型属性提供。但是,我无法将其与TreeView绑定。我在XAML中使用XmlDataProvider,无法将ViewModel属性与XAML中的XmlDataProvider绑定。下面是代码片段:如何在视图中使用XmlDataProvider绑定viewmodel的XmlDataProvider属性?
public class MainViewModel : ViewModelBase {
private static XmlDataProvider xDoc;
public static XmlDataProvider XDoc {
get {
return xDoc;
}
set {
xDoc = value;
RaisePropertyChanged("XDoc");
}
}
public MainViewModel() {
Data d = new Data();
d.int1 = 12;
d.int2 = 20;
d.str = "Hello World";
XmlSerializer serializer = new XmlSerializer(d.GetType());
StringWriter strWriter = new StringWriter();
serializer.Serialize(strWriter, d);
XDoc = new XmlDataProvider { Document =XDocument.Parse(strWriter.ToString()).ToXmlDocument(), XPath="child::node"} ;
}
}
XAML代码:
<XmlDataProvider x:Key="xmlDP" Source="{ x:Static A:MainViewModel.XDoc}" XPath="">
</XmlDataProvider>
<TreeView Grid.Row="2" Grid.ColumnSpan="2" Name="xmlTree"
DataContext="{StaticResource xmlDP}" ItemsSource="{Binding}" ItemTemplate="{StaticResource treeViewTemplate}"/>
我使用MVVM光框架。当我尝试时,我得到异常,XDoc属性应该是静态的,我不想让它静态。
如果定义我的X:XAML文件中的内部XmlDataProvider数据,那么树形视图的工作原理:
<XmlDataProvider x:Key="xmlDP" XPath="">
<x:XData>
<Employees>
<Employee Name="Steven Ballmer" DOB="1-Mar-1956">
<Title>CEO</Title>
</Employee>
</Employees>
</x:XData>
</XmlDataProvider>
<TreeView Grid.Row="2" Grid.ColumnSpan="2" Name="xmlTree"
DataContext="{StaticResource xmlDP}" ItemsSource="{Binding}" ItemTemplate=" {StaticResource treeViewTemplate}"/>
[检查此链接] [1]我认为这将他lp的你.. [1]:http://stackoverflow.com/questions/1017843/how-to-bind-an-xmldataprovider-class-property-to-a-xaml-treeview – loop
链接你提到的不是遵循MVVM架构。许多事情在代码后面完成。 – User1551892
好吧首先设置页面datacontext到你的mainviewmodel(希望你已经做到了这一点),现在你的treeview可以访问xdoc属性 – loop