0

所以这是我的剧本。我在顶部有一个工具栏(办公风格),带有按钮。这是托管在外壳中的。其中一些按钮在加载时仅适用于某些子视图模型。理想情况下,我希望将按钮 action.target 在创建时重新定位到子视图模型(我通过Action.Target="ActiveItem"它们的设置来实现这一点。但这并不能完全解决问题:

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

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

4

1 回答 1

1

向您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

于 2013-04-22T16:46:21.963 回答