2013-12-08 2 views
0

В моем проекте wpf у меня есть usercontrol, содержащий панель меню для моей программы. Я не уверен, что это правильный способ сделать это, но хороший способ держать меня в секрете. Эта панель меню содержит множество кнопок с привязками команд с использованием mvvmlight toolkit eventtocommand, это отлично работает. Но у меня есть кнопка печати, где мне нужно передать объект Visual из mainwindow в commandparameter в usercontrol.Usercontrol параметр команды от родителя

Usercontrol.xaml - где MasterGrid - это имя элемента в mainwindow.

<MenuItem Header="_Print" Command="{Binding PrintDiagramCommand}" 
      CommandParameter="{Binding ElementName=MasterGrid}" 
      InputGestureText="Ctrl+P"> 
    <MenuItem.Icon> 
     <Image Height="24" Width="24" Source="/Resources/Icons/print.ico"/> 
    </MenuItem.Icon> 
</MenuItem> 

Я очень благодарен за вашу помощь.

ответ

0

Попробуйте это, хотя я не проверил его. есть разница в ElementName и x: Ссылка на то, как элемент был найден как contextmenu, не является частью VisualTree, поэтому ElementName не работает.

CommandParameter="{Binding Source={x:Reference MasterGrid}}" 

Надеюсь, это поможет.

Примечание: не очень хорошая практика, чтобы получить доступ к элементам в ViewModel.

+0

@ethcallogics благодарит за ответ. Не совсем уверен, как делать то, о чем вы говорите, но было бы лучше сделать это по-другому? и что это? Изменить: мне нужно передать объект Visual, чтобы я мог его распечатать. Я собираюсь сделать дизайнера диаграмм. – freddy

+0

Насколько я понимаю. Распечатайте его из представления. Зачем передавать его в ViewModel. Создайте задачу и напечатайте ее в этой задаче, чтобы поток пользовательского интерфейса не блокировал .ViewModel несет ответственность за поведение, основанное на данных, и печать не влияет на поведение. – ethicallogics

+0

Я думаю, что, возможно, я был неясен. У меня есть MainWindow с MainGrid и menuBarUserControl. Кнопка, которая активирует команду печати, помещается в usercontrol, Visual (сетка), которую я хочу напечатать, является MainGrid в MainWindow. – freddy

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