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>
但遗憾的是,ViewModel
的 AddChain
方法对应于放置此代码的 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"
部分
我尝试使用 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>
但遗憾的是,ViewModel
的 AddChain
方法对应于放置此代码的 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"
部分