这是我的场景。我在顶部有一个工具栏(办公风格),带有按钮。它驻留在一个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
)