首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将视图模型的XmlDataProvider属性与视图中的XmlDataProvider绑定?

如何将视图模型的XmlDataProvider属性与视图中的XmlDataProvider绑定?
EN

Stack Overflow用户
提问于 2013-07-12 21:22:45
回答 1查看 2.2K关注 0票数 0

我正在尝试在TreeView中显示一些xml数据。Xml数据是由XmlDataProvider类型的视图模型的属性提供的。但是,我无法将其与TreeView绑定。我在XAML中使用XmlDataProvider,但无法将ViewModel属性与XAML中的XmlDataProvider绑定。下面是代码片段:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
<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工作:

代码语言:javascript
复制
 <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}"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 20:10:17

如果我不使用XMLDataProvider,而只使用XMLDoxument,那么一切都会正常工作:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17615914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档