2013-07-12 2 views
0

Я пытаюсь отобразить некоторые данные XML в TreeView. Данные Xml предоставляются свойством ViewModel типа XmlDataProvider. Однако я не могу связать его с TreeView. Я использую XmlDataProvider в XAML и не могу связать свойство ViewModel с XmlDataProvider в XAML. Ниже приведен фрагмент кода:Как связать свойство 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: данные внутри XmlDataProvider внутри XAML файл, то 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}"/> 
+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

ok fine сначала установите страницу datacontext в ваш mainviewmodel (надеюсь, вы это сделали), и теперь ваше древовидное изображение может получить доступ к свойству 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 ..в этой ссылке работа, которую вы хотели бы done..means показывая данные XML в виде дерева делается ..so просто проверить его ..

Смежные вопросы