2017-09-07 5 views
3

MVVMスキームに従って現在のWPFアプリケーションを最適化するために、フレームワークを使用しようとしています。ボタンの動作を設定するには、ボタンの値をx:Nameに設定して、ビューモデルに同じ名前の関数を追加するだけで、通常どおり問題なく実行できます。あなたがControlTemplateの中でこれをしようとすると、物事(少なくとも私にそうそうです)はもっと複雑になります。私の現在のアプローチは、このコードのようになります。Caliburn.Micro: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> 

しかし悲しいことに、このコードが置かれているviewに対応ViewModelAddChainメソッドが呼び出されることはありません。

私はこのViewModelないControlTemplateに対応ViewModelを使用するようにCaliburnを伝えるために持っていることと思います。これは正しいです?どうすれば問題を解決できますか?

答えて

1

バインドビューモデルに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> 
関連する問題