2017-04-24 20 views
0

私はTreeViewを示すアプリケーションを持っています。 TreeViewにはコンテキストメニューがあります。私はCaliburn.MicroをMVVMフレームワークとして使用しています。WPFとMVVMを使用したTreeViewsコンテキストメニューの処理

ContextMenu-Itemがクリックされた場合に何か起こるように、cal:Message.Attach="[Event Click]=[Action Remove()]"という行が必要です。この行によって、Caliburn.MicroはTreeItemのViewModel内でRemoveという名前のメソッドを検索します。

しかし、ContextMenuアイテムをクリックすると、画面のViewModelのRemoveメソッドが呼び出されます。どうやってするか?

<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
     <TextBlock Text="{Binding Name}"> 
      <TextBlock.ContextMenu> 
       <ContextMenu> 
        <MenuItem cal:Message.Attach="[Event Click]=[Action Remove()]" Name="Remove" Header="Remove item" /> 
       </ContextMenu> 
      </TextBlock.ContextMenu> 
     </TextBlock> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 
+0

かTreeItem自体のViewModel内で削除ロジックを処理する方が良いでしょうか?データベースからのDTO?) –

+1

誰かが同様の問題を抱えていました[リンク(http://stackoverflow.com/questions/24825722/bubbling-events-from-bound-viewmodel-goes-to-parent)。そして著者自身によると:[リンク[(http://stackoverflow.com/questions/3650800/bind-a-command-to-a-button-inside-a-listview-with-caliburn-micro)。 {0:EventTrigger EventName = "Click"> ' –

+0

これがあなたの問題を解決した場合、私は答えを投稿しました –

答えて

0

誰かが同様の問題があった“Bubbling” events from bound viewmodel goes to parent

そして著者自身Bind a Command to a Button inside a ListView with Caliburn.Microによると。

だから慣例により、または、このようにそれを呼び出します。詳細については、ここに私の答えを参照してください

<TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
     <TextBlock Text="{Binding Name}"> 
      <TextBlock.ContextMenu> 
       <ContextMenu> 
        <MenuItem Tag="{Binding RelativeSource={RelativeSource AncestorType=TreeView}}" 
           cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag.DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" 
           cal:Message.Attach="[Event Click]=[Action RemoveResource()]" Name="Remove" Header="Remove item" /> 
       </ContextMenu> 
      </TextBlock.ContextMenu> 
     </TextBlock> 
    </HierarchicalDataTemplate> 
</TreeView.ItemTemplate> 

:これを試してみてください

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Click"> 
     <cal:ActionMessage MethodName="{Binding Name}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
+0

残念ながらそれはうまくいきません。影響はありません。 –

関連する問題