Как связать свойство XmlDataProvider viewmodel с представлением XmlDataProvider?
Я пытаюсь отобразить некоторые данные XML в TreeView. Данные XML предоставляются свойством ViewModel типа XmlDataProvider. Однако я не могу связать его с TreeView. Я использую XmlDataProvider в XAML и не могу связать свойство ViewModel с XmlDataProvider в XAML. Ниже приведен фрагмент кода:
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 framework. При попытке получить исключение, свойство XDoc должно быть статическим, и я не хочу делать его статическим.
Если определить мои данные X: внутри XmlDataProvider в файле xaml, то работает древовидная структура:
<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}"/>
2 ответа
Если я не использую 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}"/>
проверьте эту ссылку.. в этой ссылке работа, которую вы хотели сделать.. означает, что данные XML в древовидном представлении сделаны.. так что просто проверьте это..