【问题标题】:Partial TreeView refresh after EF model ItemsSource updateEF 模型 ItemsSource 更新后的部分 TreeView 刷新
【发布时间】:2014-02-14 00:37:02
【问题描述】:

我有一个实体框架模型和一个与模型绑定的 TreeView。

在构造函数中:

 Context.TestCategory.Load();

我的树视图:

<TreeView x:Name="DbTree" ItemsSource="{Binding Context.TestCategory.Local}">
    <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Tests}" >
                <TextBlock Text="{Binding Name}" ContextMenuOpening="ContextMenu_ContextMenuOpening">
                        <TextBlock.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Добавить тест" Click="TestAdd" CommandParameter="{Binding 
                                     RelativeSource={RelativeSource 
                                     AncestorType={x:Type ContextMenu}}}"></MenuItem>
                            </ContextMenu>
                        </TextBlock.ContextMenu> 
                 </TextBlock>
........................................
other items
........................................
            </HierarchicalDataTemplate>
       </TreeView.ItemTemplate>
</TreeView>

更新 ItemsSource 中的项目后,我需要更新相关的 TreeView 分支,最好的方法是什么?

【问题讨论】:

    标签: c# wpf treeview refresh


    【解决方案1】:

    我不确定将您的 ItemsSource 直接绑定到上下文属性是一件好事。

    您应该对绑定执行的操作是绑定到一个属性,该属性可以在它发生更改时执行RaisePropertyChanged,然后如果需要,UI 元素将更新。我使用 MVVM,所以我的绑定全部来自 ViewModel,它是 View 的数据上下文,并实现了 INotifyPropertyChanged 接口。然后在其中我的属性设置器看起来像这样:

        private List<TestCategories>_myItemSourceList;
        public List<TestCategories> MyItemSourceList
        {
            get { return _myItemSourceList; }
            set
            {
                if (value != _myItemSourceList)
                {
                    _myItemSourceList= value;
                    RaisePropertyChanged(() => MyItemSourceList);
                }
            }
        }
    

    XAML 看起来像 ...

    <TreeView x:Name="DbTree" ItemsSource="{Binding MyItemSourceList}">
    

    显然,因为您没有使用 MVVM,您的代码会略有不同,但原则仍然存在:将您的 ItemSource 绑定到可以 RaisePropertyChanged 的属性。

    编辑:我的 RaisePropertyChanged 在 Prism 框架内,因此使用 lambda,但“标准”是使用像这样的字符串 RaisePropertyChanged("MyItemSourceList")

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多