首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TreeView ItemSource绑定到ViewModel不更新xaml控件的项

TreeView ItemSource绑定到ViewModel不更新xaml控件的项
EN

Stack Overflow用户
提问于 2021-09-30 23:47:00
回答 1查看 26关注 0票数 0

我正在创建一个包装TreeView元素的UserControl (让我们称之为ViewTree)。在ViewTree.xaml.cs中,我有一个Source依赖属性:

代码语言:javascript
运行
复制
public static readonly DependencyProperty SourceProperty
    = DependencyProperty.Register (
        "Source",
        typeof (ObservableCollection<TreeItem>),
        typeof (ViewTree),
        new FrameworkPropertyMetadata (new ObservableCollection<TreeItem>(), OnSourceChanged)
    );
public ObservableCollection<TreeItem> Source
{
    get { return (ObservableCollection<TreeItem>)GetValue(SourceProperty); }
    set { SetValue(SourceProperty, value); }
}

此UserControl的使用者可以执行输入绑定的...so:

代码语言:javascript
运行
复制
<features:ViewTree Source="{Binding Path=...}">

然而,在ViewTree UserControl中,我并不想直接绑定到这个DependencyProperty。相反,我想绑定到ViewModel中的另一个属性(使用棱镜),所以我在ViewTree.xaml.cs中这样做:

代码语言:javascript
运行
复制
private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    var nextTreeSource = e.NewValue as ObservableCollection<TreeItem>;
    if (nextTreeSource == null)
    {
        return;
    }
    var viewTree = d as ViewTree;
    viewTree.UpdateTreeSource(nextTreeSource);
}
public void UpdateTreeSource(ObservableCollection<TreeItem> treeSource)
{
    var vm = trvMenu.DataContext as ViewTreeViewModel;
    vm.TreeSource = treeSource;
}

在我的ViewTree.xaml中,我有以下内容,并且树节点正常出现:

代码语言:javascript
运行
复制
<TreeView Name="trvMenu" ItemsSource="{Binding Path=TreeSource}">

但是,当我尝试在ViewTree.xaml.cs中访问trvMenu.Items时,它显示为空。我在viewTree.UpdateTreeSource(nextTreeSource);后面放了一个断点,可以验证viewTree.trvMenu.Items里面是否有孩子。

如果我直接绑定到DependencyProperty,它会工作得很好,但我仍然更喜欢ViewModel绑定。

如果有人能指出我哪里做错了,我将不胜感激,或者这只是WPF的工作方式?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-10-01 06:40:09

经过更多的调试,我发现了问题,这完全是我的错,与DP或VM绑定无关。

我有两个ViewTree控件的使用者。在ViewTree中,我订阅了一个事件,当它触发时,两个ViewTree元素都会调用处理程序。

异常是在一个消费者的ViewTree上抛出的,其中TreeSource没有初始化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69399869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档