【发布时间】:2013-07-12 13:22:44
【问题描述】:
我正在尝试在 TreeView 中显示一些 xml 数据。 Xml 数据由 ViewModel 的 XmlDataProvider 类型的属性提供。但是,我无法将它与 TreeView 绑定。我在 XAML 中使用 XmlDataProvider,无法将 ViewModel 属性与 XAML 中的 XmlDataProvider 绑定。下面是代码sn-p:
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}"/>
【问题讨论】:
-
[查看此链接][1] 我认为它会对您有所帮助.. [1]:stackoverflow.com/questions/1017843/…
-
您提到的链接不遵循 MVVM 架构。许多事情都在代码中完成。
-
好的,首先将页面数据上下文设置为您的主视图模型(希望您已经这样做了),现在您的树视图可以访问 xdoc 属性
标签: c# wpf mvvm-light xmldataprovider