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

我被这个SB的WPF treeview 节点重命名,折腾了7个小时,大神们来救救我,指个招, 问题简单,附有代码.
我用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; }
        }
}
------解决方案--------------------
要实现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));
        }
    }
}

------解决方案--------------------
最好自己写一个 数据管理类,用来管理你的Item类数据,所有的操作都放到这个类里。
在你的  Abb 后代,直接绑定它的 DataContext为你的数据管理类,如: this.DataContext = dataManage;