我被这个SB的WPF treeview 节点重命名,折腾了7个小时,大神们来救救我,指个招, 问题简单,附有代码.

Ptrtoptr 2014-06-24 11:02:46
我用TreeView 绑定了 ObservableCollection集合做数据源.
//按说ObservableCollection集合, 数据更新,界面也应该同步,
但是界面没有变化. 代码如下:


<TreeView x:Name="tv" SelectedItemChanged="SelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ContextMenu>
<ContextMenu >
<MenuItem Header="重命名" Name="rename" Click="rename_Click"></MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
/////
public partial class Abb : Window {
public Abb() {
InitializeComponent();
Item item = new Item() { Name = "parent" , Items= new ObservableCollection<Item>()};
item.Items.Add(new Item(){Name="child1"});
item.Items.Add(new Item(){Name="child2"});
ObservableCollection<Item> list = new ObservableCollection<Item>();
list.Add(item);
tv.ItemsSource = list;
}
private void rename_Click(object sender, RoutedEventArgs e) {
Item item = tv.SelectedItem as Item;
item.Name = "new Name";
//按说是ObservableCollection集合, 这里的数据更新,界面也应该同步,但是界面没有变化
//请问怎么处理能让界面同步更新,
//我试过tv.items.Refresh() ,它可以让界面同步,不过它会把整个树都折叠起来,并且没有了SelectedItem.
//请问还有什么办法能让界面同更新
}
public class Item {
public string Name { get; set; }
public ObservableCollection<Item> Items { get; set; }
}
}
...全文
91 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
exception92 2014-06-25
最好自己写一个 数据管理类,用来管理你的Item类数据,所有的操作都放到这个类里。 在你的 Abb 后代,直接绑定它的 DataContext为你的数据管理类,如: this.DataContext = dataManage; 然后再xaml上直接使用bind 来绑定你的数据集合。注意,你的 ObservableCollection集合也要 FirePropertyChangedEvent一下。
回复
gomoku 2014-06-25
要实现INotifyPropertyChanged:

public class Item : INotifyPropertyChanged
{
    string name;
    public string Name 
    { 
        get { return name;}
        set { name = value; FirePropertyChangedEvent("Name"); }
    }
    public ObservableCollection<Item> Items { get; set; }



    public event PropertyChangedEventHandler PropertyChanged;
    private void FirePropertyChangedEvent(string property)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2014-06-24 11:02
社区公告

让您成为最强悍的C#开发者