所以这是我的screnario。我在顶部有一个工具栏(办公室风格),带有按钮。它托管在一个shell中。其中一些按钮仅在加载时适用于某些子视图模型。理想情况下,我想要发生的是将按钮action.target重新定位到子视图模型,因为它被创建(我有点通过设置Action.Target="ActiveItem"
对它们进行工作。但这并没有完全解决问题:
a)当子视图模型关闭且没有活动项时,我希望它们重新定位到Shell作为目标,以便将它们设置为“默认”状态。 b)我注意到当子视图模型被关闭并且作为导体的shell具有ActiveItem = null时,来自动作的钩子仍然绑定到最后一个视图模型的活动实例,因此看起来不会被处理掉。内存泄漏?
有关如何实施此方案的任何建议吗?
答案 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)