C# 当cal:Bind.Model指向新的对象实例时,如何让caliburn.micro知道重新附加操作?

C# 当cal:Bind.Model指向新的对象实例时,如何让caliburn.micro知道重新附加操作?,c#,mvvm,caliburn.micro,C#,Mvvm,Caliburn.micro,我在Caliburn.Micro中有一个简单的用例。我可以用传统的绑定轻松地实现这一点,但我希望正确地使用该框架 简而言之,这是一个MDI风格的应用程序,有一个顶层工具栏,我想将其上下文绑定到Conductor.ActiveItem。基本上,我看到的问题是Calibun为第一个打开的选项卡设置了工具栏按钮的操作,但是后来当ActiveItem更改时,连接的操作继续指向第一个指定的ActiveItem,而不是新的 我的主视图模型的类型为Conductor.Collection.OneActive

我在Caliburn.Micro中有一个简单的用例。我可以用传统的绑定轻松地实现这一点,但我希望正确地使用该框架

简而言之,这是一个MDI风格的应用程序,有一个顶层工具栏,我想将其上下文绑定到Conductor.ActiveItem。基本上,我看到的问题是Calibun为第一个打开的选项卡设置了工具栏按钮的操作,但是后来当ActiveItem更改时,连接的操作继续指向第一个指定的ActiveItem,而不是新的

我的主视图模型的类型为Conductor.Collection.OneActive

public sealed class MainViewModel : Conductor<ITabPage>.Collection.OneActive
{
}
现在,该视图包含顶级工具栏,其中包含调用ActiveItem上的操作的按钮,以及显示导体项的TabControl

<Window xmlns:cal="http://www.caliburnproject.org" ...>
    <DockPanel>
        <ToolBar DockPanel.Dock="Top" cal:Bind.Model="{Binding ActiveItem}">
            <Button Name="Save">Save</Button>
            <Button Name="Undo">Undo</Button>
        </ToolBar>
        <TabControl x:Name="Items">
        </TabControl>
    </DockPanel>
</Window>

拯救
撤消

使用普通绑定和ICommands可以很好地工作,但我不想在这方面与框架抗衡。我是否缺少或误用了cal:Bind.Model?或者是一种让它知道刷新的方法?我还尝试在ActiveItem发生更改时调用Refresh(),我绝对“确定CanSave和CanUndo通知正确(我设置了断点,并成功使用了正常绑定)。

找到了一个解决方案:我误用了caliburn:Bind.Model

正确的绑定类型是

caliburn:Bind.ModelWithoutContext="{Binding ... }"
相反,使用该依赖项属性帮助器可以在ActiveItem更改时将操作正确路由到ActiveItem

caliburn:Bind.ModelWithoutContext="{Binding ... }"