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

时间:2013-04-22 16:35:40

标签: caliburn.micro

所以这是我的screnario。我在顶部有一个工具栏(办公室风格),带有按钮。它托管在一个shell中。其中一些按钮仅在加载时适用于某些子视图模型。理想情况下,我想要发生的是将按钮action.target重新定位到子视图模型,因为它被创建(我有点通过设置Action.Target="ActiveItem"对它们进行工作。但这并没有完全解决问题:

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

有关如何实施此方案的任何建议吗?

1 个答案:

答案 0 :(得分:1)

如何向ShellViewModel添加指向操作目标的属性,并在激活/停用内容时更新该属性:

e.g。

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}" />

不确定这是否有效,但我确信我过去做过类似的事情。 (您可能还必须在更改ActiveItem后更新之前明确调用NPC)