Caliburn.Micro: ControlTemplate 中按钮的动作

Caliburn.Micro: Action of Button inside ControlTemplate

我尝试使用 Caliburn.Micro 框架按照 MVVM 方案优化我当前的 WPF 应用程序。只需设置按钮的 x:Name 值并在视图模型中添加具有相同名称的函数,通常就可以毫无问题地实现设置按钮的操作。当您尝试在 ControlTemplate 中执行此操作时,事情(至少在我看来如此)变得更加复杂。我当前的方法类似于以下代码:

<ItemsControl x:Name="Chains">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <StackPanel>
                <ContentControl/>
                <ItemsPresenter />
                <Button Content="+" x:Name="AddChain"/>
             </StackPanel>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

但遗憾的是,ViewModelAddChain 方法对应于放置此代码的 view 从未被调用。

我想我必须告诉 Caliburn 使用这个 ViewModel 而不是 ViewModel,它对应于 ControlTemplate。这个对吗?我该如何解决这个问题?

cal:Bind.Model 附加 属性 绑定到您的视图模型:

<ItemsControl x:Name="Chains">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl" xmlns:cal="http://www.caliburnproject.org">
            <StackPanel cal:Bind.Model="{Binding}">
                <ContentControl/>
                <ItemsPresenter />
                <Button Content="+" x:Name="AddChain"/>
            </StackPanel>
        </ControlTemplate>
    </ItemsControl.Template>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

CaliburnMicro下还有更多例子。我对在 ItemSource 下动态创建的按钮有同样的问题。 MM8 answer answer 是有帮助的,应该足够了,但如果你想了解更多或其他应用程序,通读会对你有所帮助。 CaliburnMicro ActionDocs - 请参阅第 "Action Parameters"

部分