首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用动态数据集替换WPF用户控件中的静态XmlDataProvider的正确方法是什么?

用动态数据集替换WPF用户控件中的静态XmlDataProvider的正确方法是什么?
EN

Stack Overflow用户
提问于 2011-04-08 06:33:36
回答 1查看 1K关注 0票数 5

问题可能需要编辑,因为我认为我不一定知道做这件事的最佳方法。

我的WPF用户控件的当前配置。我有一个XmlDataProvider,其中包含一些用于填充TreeView控件的静态XML元素。我当前使用HierarchicalDataTemplate绑定到TreeViewItem

代码语言:javascript
复制
    <HierarchicalDataTemplate x:Key="SiteTemplate" ItemsSource="{Binding XPath=pci}">
        <TextBlock Text="{Binding XPath=@Name}"/>
    </HierarchicalDataTemplate>
    <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="True"/>
    </Style>

TreeView控件

代码语言:javascript
复制
 <TreeView ItemsSource="{Binding Source={StaticResource SharePointSites}}" 
                              ItemTemplate="{StaticResource SiteTemplate}" 

我想用在运行时从xml文件加载的数据替换当前的静态资源。此外,我希望用户能够在运行时修改treeview的节点,并将这些值写回相同的xml文件。我一直在阅读有关使用MVVM模式和创建IObservable类的内容。谁能给我指个方向?

编辑:也许我以一种次优的方式提出了这个问题。有没有人可以建议改进或进行编辑,以提高问题的质量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-22 15:48:25

我无法访问我的Visual Studio环境,因此下面的代码将充满编译错误...所以请将其作为伪代码来处理...

假设您的Xml结构是这样的……

代码语言:javascript
复制
<MyItem Name="Root"> 
    <MyItem Name="ABC"/> 
    <MyItem Name="PQR"> 
        <MyItem Name="IJK"/> 
    </MyItem> 
    <MyItem Name="XYZ"/> 
</MyItem> 

  1. 通过一个转换器绑定你的ItemsSource,比如MyXmlToObjectDataSourceConverter。

new XmlNodeWrapper(d)).ToList()) public object Convert(...)公共对象转换(...){return new ObservableCollection(public d=>new XmlNodeWrapper(D)).ToList()将在内部维护'node‘,这样当通过属性Setter进行更新时,您可以重新更新基于节点的属性...像这样..。

公有类XmlNodeWrapper : INotifyPropertyChanged {私有XmlNode节点;私有ObservableCollection子节点;公有XmlNodeWrapper(XmlNode节点){ this.node =节点;}公有新子代{ get { if (子代ObservaleCollection == ){ this.children =新ObservableCollection( this.node.ChildNodes.Select( d => ObservaleCollection XmlNodeWrapper(d)).ToList());}返回子代;}}公共字符串名称{ get { return node.Attributes" Name ";} set { node.Attributes"Name“= value;this.PropertyChanged"Name";}}公共事件PropertyChangedEventHandler PropertyChanged;private void PropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(info));}

  • 然后用标准路径替换XAML中的所有XPath属性。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5588442

复制
相关文章

相似问题

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