2013-07-12 59 views
0

我想在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}"/> 
+0

[检查此链接] [1]我认为这将他lp的你.. [1]:http://stackoverflow.com/questions/1017843/how-to-bind-an-xmldataprovider-class-property-to-a-xaml-treeview – loop

+0

链接你提到的不是遵循MVVM架构。许多事情在代码后面完成。 – User1551892

+0

好吧首先设置页面datacontext到你的mainviewmodel(希望你已经做到了这一点),现在你的treeview可以访问xdoc属性 – loop

回答

0

如果我不使用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}"/> 
0

check this link ..in此链接,您想成为显示树状视图XML数据done..means工作完成..所以只是检查出来..

相关问题