2014-01-28 4 views
3

У меня есть UserControl (MainView), на котором есть окно просмотра для отображения другого UserControl (MidView), и внутри этого UserControl у меня есть холст, который показывает другой UserControl (BottomView). У внука UserControl (BottomView) у меня есть ListBox, который я хочу, чтобы иметь возможность щелкнуть правой кнопкой мыши и вызвать конкретный метод.Метод не найден Caliburn Micro (проблема DataContext?)

У меня есть

cal:Message.Attach="[Event MouseRightButtonDown] = [Action Method1]" 

на ListBox, но всякий раз, когда я щелкните правой кнопкой мыши в окно, он проверяет, бабушки и дедушки ViewModel (MainViewModel) для "method1". Я думаю, что мне нужно использовать cal: Action.TargetWithoutContext, чтобы заставить его смотреть в BottomViewModel, но я не могу решить, как его использовать.

Я думал

cal:Action.TargetWithoutContext="{Binding MainView}" 

или

cal:Action.TargetWithoutContext="{Binding MainViewModel}" 

бы решить мою проблему, но не повезло. Любые идеи, в которых я ошибаюсь?

ответ

5

Я нашел старое приложение, где я сделал это для меню правой кнопки мыши Context на TreeView и необходимое для выполнения метода на фактическом выбранный элементе ViewModel, а не родитель ViewModel.

я использовал:

<ContextMenu cal:Action.TargetWithoutContext="{Binding DataContext, RelativeSource={RelativeSource Self}}"> 
    <MenuItem Header="Edit" cal:Message.Attach="Edit" /> 
    <!-- Other Menu Items --> 
</ContextMenu> 

Надеюсь, подобная же логика будет применяться к вашей ситуации (с указанием нужного события/метод).

Смежные вопросы