Привязка команды к загруженной viewmodel

#wpf #xaml #mvvm

#wpf #xaml #mvvm

Вопрос:

У меня есть раздел в моем MainMenuView , который загружает выбранную viewmodel в ContentControl . Из DataContext MainMenuView этого есть MainMenuViewModel .

Могу ли я привязать кнопку из главного меню к команде в SelectedViewModel или мне нужно вызвать событие?

 <Fluent:Ribbon>
   <!--Userdata-->
   <Fluent:RibbonTabItem Header="Data" x:Name="TabVerm" Group="{Binding ElementName=VermittlerGroup}">
      <Fluent:RibbonGroupBox Header="Data">
         <Fluent:Button" Command="{Binding Path=DataContext.VermittlerSave, ElementName=VermittlerView}" Header="Save" LargeIcon="{iconPacks:FontAwesome Kind=SaveRegular,Width=30,Height=25}"></Fluent:Button>
         <Fluent:Button Header="Cancel" LargeIcon="{iconPacks:FontAwesome Kind=UndoAltSolid,Width=30,Height=25}"></Fluent:Button>
      </Fluent:RibbonGroupBox>
      <Fluent:RibbonGroupBox Header="Activate">
         <Fluent:Button Header="Aktivate User" LargeIcon="{iconPacks:FontAwesome Kind=StackExchangeBrands,Width=30,Height=25}"></Fluent:Button>
         <Fluent:Button  Header="New User" LargeIcon="{iconPacks:FontAwesome Kind=PlusCircleSolid,Width=30,Height=25}"></Fluent:Button>
      </Fluent:RibbonGroupBox>
   </Fluent:RibbonTabItem>
</Fluent:Ribbon>
<Grid Grid.Row="1">
   <ContentControl Grid.Row="1" Content="{Binding SelectedViewModel}"/>
</Grid>
  

Ответ №1:

Вы должны быть в состоянии сделать это, указав свое ContentControl имя.

 <ContentControl Grid.Row="1" x:Name="MyContentControl" Content="{Binding SelectedViewModel}"/>
  

Затем вы можете ссылаться на нее и ее Content свойство, которое содержит модель представления в привязке команды, например:

 <Fluent:Button" Command="{Binding Content.VermittlerSave, ElementName=MyContentControl}" Header="Save" LargeIcon="{iconPacks:FontAwesome Kind=SaveRegular,Width=30,Height=25}"/>
  

Конечно, это применимо только в том случае, если любая выбранная модель представления содержит привязанную команду.

Альтернативой привязке является обмен данными с событиями, например, с использованием шаблона агрегатора событий, который используется большинством фреймворков MVVM, таких как Caliburn.Micro или Prism предоставляют или вы можете взглянуть на CompositeCommand подход Prism, который позволяет вам создавать команды, к которым могут присоединяться другие команды. Вы можете создавать составные команды для своего меню и динамически присоединять или отсоединять реальные команды от выбранной модели представления.