Caliburn.Micro:Button内部的ControlTemplate操作

时间:2017-09-07 13:37:19

标签: wpf xaml mvvm action caliburn.micro

我尝试使用Caliburn.Micro框架来优化WPF方案之后的当前MVVM应用程序。通过设置按钮的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>

但遗憾的是,AddChain的{​​{1}}方法对应于放置此代码的ViewModel永远不会被调用。

我认为我必须告诉view使用此Caliburn而不是ViewModel来对应ViewModel。它是否正确?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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>

答案 1 :(得分:0)

CaliburnMicro下有更多示例。我在ItemSource下动态创建的按钮也遇到了同样的问题。 MM8答案是有帮助的,应该足够了,但是如果您想了解更多或对于其他应用程序有个通读将对您有所帮助。 CaliburnMicro ActionDocs-请参阅“操作参数”部分