#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, который позволяет вам создавать команды, к которым могут присоединяться другие команды. Вы можете создавать составные команды для своего меню и динамически присоединять или отсоединять реальные команды от выбранной модели представления.