首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

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

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

请教:关于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

热点排行