![](/img/trans.png)
[英]How to Bind an XmlDataProvider Class Property to a XAML TreeView
[英]How to bind XmlDataProvider property of viewmodel with XmlDataProvider in view?
我试图在TreeView中显示一些xml数据。 Xml数据由ViewModel的XmlDataProvider类型的属性提供。 但是,我无法将其与TreeView绑定。 我在XAML中使用XmlDataProvider,并且无法在XAML中将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 light框架。 当我尝试时,我得到XDoc属性应该是静态的异常,并且我不想使其变为静态。
如果在xaml文件的XmlDataProvider中定义我的X:data,则treeview可以工作:
<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}"/>
检查此链接 ..在此链接中,您要完成的工作..意味着在树状视图中显示xml数据已完成..所以只需将其签出即可。
如果我不使用XMLDataProvider而是仅使用XMLDoxument,那么一切都会正常进行:
public class MainViewModel : ViewModelBase {
private XmlDocument xDoc;
public XmlDocument 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 = XDocument.Parse( strWriter.ToString( ) ).ToXmlDocument () ;
}
}
<TreeView Grid.Row="2" Grid.ColumnSpan="2" Name="xmlTree"
ItemsSource="{Binding XDoc}" ItemTemplate="{StaticResource treeViewTemplate}"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.