问题可能需要编辑,因为我认为我不一定知道做这件事的最佳方法。
我的WPF用户控件的当前配置。我有一个XmlDataProvider,其中包含一些用于填充TreeView控件的静态XML元素。我当前使用HierarchicalDataTemplate绑定到TreeViewItem
<HierarchicalDataTemplate x:Key="SiteTemplate" ItemsSource="{Binding XPath=pci}">
<TextBlock Text="{Binding XPath=@Name}"/>
</HierarchicalDataTemplate>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
</Style>TreeView控件
<TreeView ItemsSource="{Binding Source={StaticResource SharePointSites}}"
ItemTemplate="{StaticResource SiteTemplate}" 我想用在运行时从xml文件加载的数据替换当前的静态资源。此外,我希望用户能够在运行时修改treeview的节点,并将这些值写回相同的xml文件。我一直在阅读有关使用MVVM模式和创建IObservable类的内容。谁能给我指个方向?
编辑:也许我以一种次优的方式提出了这个问题。有没有人可以建议改进或进行编辑,以提高问题的质量?
发布于 2011-07-22 15:48:25
我无法访问我的Visual Studio环境,因此下面的代码将充满编译错误...所以请将其作为伪代码来处理...
假设您的Xml结构是这样的……
<MyItem Name="Root">
<MyItem Name="ABC"/>
<MyItem Name="PQR">
<MyItem Name="IJK"/>
</MyItem>
<MyItem Name="XYZ"/>
</MyItem> 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));}
https://stackoverflow.com/questions/5588442
复制相似问题