wpf treeview 刷新

场景:请问:关于WPF中数据绑定TreeView 删除节点不刷新UI的有关问题

请教:关于WPF中数据绑定TreeView 删除节点不刷新UI的问题
后台数据 几个关键的部分如下
C# code

 /// <summary>
    ///ViewModel 
    /// </summary>
    public class ForDictList:IMappingRule,INotifyPropertyChanged
    {
        public string DisplayeName { get; set; }
        public string Desc { get; set; }
        public string DictID { get; set; }
        public string CategoryID { get; set; }
      
        ForDictList _parent;

        public ForDictList(ForDictList Parent)
        {
            Children = new List<ForDictList>();
            _parent = Parent;
        }

        public ForDictList Parent
        {
            get { return _parent; }
            set 
            {
                _parent.OnPropertyChanged("Children");
                _parent = value;
            }
        }

        List<ForDictList> _children;
        public List<ForDictList> Children
        {
            get 
            {
                return _children;
            }
            set
            {
                _children = value;
                OnPropertyChanged("Children");
            }
        }

        

        bool _isExpanded;
        public bool IsExpanded
        {
            get { return _isExpanded; }
            set
            {
                if (value != _isExpanded)
                {
                    _isExpanded = value;
                    OnPropertyChanged("IsExpanded");

                    if (_parent!=null&&!_parent._isExpanded)
                    {
                        _parent._isExpanded = true;
                    }
                }
            }
        }


        bool _isSelected;
        public bool IsSelected
        {
            get { return _isSelected; }
            set
            {
                if (value != _isSelected)
                {
                    _isSelected = value;
                    OnPropertyChanged("IsSelected");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }



现在我在TreeView中绑定该数据 ( List<ForDictList> )

对应的TreeView的XAML如下(部分)

HTML code

<TreeView    Padding="0" Margin="0" BorderThickness="1">
                            <TreeView.ItemContainerStyle>
                                <Style TargetType="{x:Type TreeViewItem}">
                                    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                                    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                                    <EventSetter Event="UIElement.PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
                                </Style>
                            </TreeView.ItemContainerStyle>
                            <TreeView.ItemTemplate>
                                <HierarchicalDataTemplate DataType="{x:Type local:ForDictList}" ItemsSource="{Binding Children,Mode=TwoWay}">
                                    <StackPanel AllowDrop="True" Drop="StackPanel_Drop" MouseMove="StackPanel_MouseMove" Margin="0,0,0,10" Orientation="Horizontal">
                                        <StackPanel.ContextMenu>
                                            <ContextMenu>
           
                                            </ContextMenu>
                                        </StackPanel.ContextMenu>
                                        <Image VerticalAlignment="Center" Source="{Binding Icon}" Width="30" Height="30" Margin="0,0,2,2"></Image>
                                        <TextBlock VerticalAlignment="Center" FontSize="12" Text="{Binding DisplayeName}"/>
                                        <!--<Image VerticalAlignment="Center" Source="{Binding EditIcon}" Margin="2,0,0,0"></Image>-->
                                        <!--<StackPanel.ToolTip>
                                            <TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
                                        </StackPanel.ToolTip>-->
                                    </StackPanel>
                                </HierarchicalDataTemplate>
                            </TreeView.ItemTemplate>
                        </TreeView>




显示完全没有问题,我现在想执行 拖动节点操作,在后台我是这么做的(XXX_Drop(object sender, DragEventArgs e) 部分)

C# code

ForDictList source_data= stackPanel.DataContext as ForDictList;
            ForDictList drag_data = e.Data.GetData(typeof(ForDictList)) as ForDictList;

//在目标节点的children中加 入  拖动的节点 
source_data.Children.Add(drag_data);

//告诉拖动的节点的曾经的父节点  让其将该节点删除
drag_data.Parent.Children.Remove(drag_data);



现在 问题出现在,目标节点下出现了 该 “被拖动的节点” 但是 该“被拖动的节点” 的父节点下 依然存在该节点。。。。

小弟基础欠佳,实在不知道原因在哪,再次先谢过看完我问题的朋友。

------解决方案--------------------
你使用ObservableCollection代替List来设置你的数据源,就会在你的数据源更新的时候自动刷新UI

http://www.cnblogs.com/chengxingliang/archive/2011/07/18/2108732.html
------解决方案--------------------
探讨

你使用ObservableCollection代替List来设置你的数据源,就会在你的数据源更新的时候自动刷新UI

http://www.cnblogs.com/chengxingliang/archive/2011/07/18/2108732.html