Я пытаюсь отобразить некоторые данные 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}"/>
[проверить эту ссылку] [1] я думаю, что он будет LP вас .. [1]: http://stackoverflow.com/questions/1017843/how-to-bind-an-xmldataprovider-class-property-to-a-xaml-treeview – loop
В ссылке вы упомянули, что не следуете архитектуре MVVM. Многие вещи делаются в коде. – User1551892
ok fine сначала установите страницу datacontext в ваш mainviewmodel (надеюсь, вы это сделали), и теперь ваше древовидное изображение может получить доступ к свойству xdoc – loop