【问题标题】:How to bind XmlDataProvider property of viewmodel with XmlDataProvider in view?如何在视图中将 viewmodel 的 XmlDataProvider 属性与 XmlDataProvider 绑定?
【发布时间】:2013-07-12 13:22:44
【问题描述】:

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

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 框架。当我尝试时,我得到 XDoc 属性应该是静态的并且我不想让它成为静态的异常。

如果在 xaml 文件中的 XmlDataProvider 中定义我的 X:data,则 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] 我认为它会对您有所帮助.. [1]:stackoverflow.com/questions/1017843/…
  • 您提到的链接不遵循 MVVM 架构。许多事情都在代码中完成。
  • 好的,首先将页面数据上下文设置为您的主视图模型(希望您已经这样做了),现在您的树视图可以访问 xdoc 属性
  • 请查看这个答案:stackoverflow.com/questions/1866942/…

标签: c# wpf mvvm-light xmldataprovider


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 2012-01-14
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多