我尝试使用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
。它是否正确?我该如何解决这个问题?
答案 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-请参阅“操作参数”部分