私は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>
かTreeItem自体のViewModel内で削除ロジックを処理する方が良いでしょうか?データベースからのDTO?) –
誰かが同様の問題を抱えていました[リンク(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"> i:EventTrigger> ' –
これがあなたの問題を解決した場合、私は答えを投稿しました –