将父视图模型的操作重新连接到子视图模型



这是我的场景。我在顶部有一个工具栏(办公风格),带有按钮。它驻留在一个shell中。其中一些按钮仅在加载时适用于某些子视图模型。理想情况下,我想发生的是有按钮的行动。目标重新定位到子视图模型,因为它被创建(我有点得到这个工作通过设置Action.Target="ActiveItem"对他们。这并不能完全解决问题:

a)当子视图模型关闭并且没有活动项时,我希望它们重新定位到Shell作为目标,以便它们可以设置为"默认"状态。b)我注意到,当子视图模型关闭,外壳作为导体有它ActiveItem=null时,动作的钩子仍然绑定到最后一个视图模型的活实例,所以看起来不像它被处理了。内存泄漏?

有什么建议如何实现这个场景吗?

给你的ShellViewModel添加一个指向动作目标的属性,并在东西激活/停用时更新它:

public class ShellViewModel
{
    public object ActionTarget
    {
        get { return _actionTarget; }
        set 
        { 
            _actionTarget = value; 
            NotifyOfPropertyChange(() => ActionTarget); 
        }
    }
    // Then when the active item changes just update the target:
    public override NotifyOfPropertyChange(string propertyName)
    {
        if(propertyName == "ActiveItem") 
        {
            if(ActiveItem == null) ActionTarget = this;
            else ActionTarget = ActiveItem;
        }
    }
}

现在绑定到:

<SomeMenu cal:Action.Target="{Binding ActionTarget}" />

不确定这是否会起作用,但我确信我过去做过类似的事情。(你也可以明确地调用NPC在你的行动之前,他们将更新后,你改变了ActiveItem)

相关内容

  • 没有找到相关文章

最新更新