Как связать кнопку на UserControl с командой в родительском элементе управления? - PullRequest
1 голос
/ 23 апреля 2019

У меня проблема с привязкой моего Button в UserControl к Command в родительском.

У меня есть UserControl (SearchView), который отображает данные результатов поиска. Он содержит Menu, в который я хочу включить функцию сброса пользовательских настроек (размер шрифта, сортировка и т. Д.). Поскольку их несколько, я хочу иметь функцию сброса в родительском контроле (MainView).

MainViewXaml:

<UserControl x:class="UI.MainView"
xmlns:ui="clr-namespace:Project.Main.UI">
//some stuff here
<ui:SearchView/>
//some stuff here
</UserControl>

MainView.xaml.vb:

Namespace UI

Public Class MainView

Public ReadOnly Property ResetCommand As New DelegateCommand(AddressOf ResetEinstellungen)

Public Sub ResetEinstellungen()
      //Reset Einstellungen ...
End Sub

SearchView:

<UserControl x:Class="UI.SearchView"
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm">
<Grid>
//Table Stuff
</Grid>
<Menu>
    <MenueItem Header="Reset"
               x:Name="ResetButton">
          <dxmvvm:Interaction.Behaviors>
                    <dxmvvm:EventToCommand EventName="Click"
                                           Command="{Binding ResetCommand , RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl} }">
                    </dxmvvm:EventToCommand>
          </dxmvvm:Interaction.Behaviors>
     </MenuItem>
</Menu>

Я уже пробовал некоторые варианты. Чего я хочу избежать, так это переопределить MainView по его ElementName, поскольку я хочу потенциально использовать UserControl в других представлениях.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Я поставил эксперимент вместе.

Это работает для меня:

   <MenuItem Header="Reset"
              Command="{Binding DataContext.ResetCommand , RelativeSource={RelativeSource AncestorType=UserControl} }"/>

Примечание:

DataContext.CommandName

Вы можете использовать командув пункте меню, а не в команде eventto.

0 голосов
/ 23 апреля 2019

Попробуйте установить AncestorLevel на 2, поскольку значение по умолчанию 1 будет привязано к SearchView, а не к MainView:

Command="{Binding ResetCommand , RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=2, AncestorType=UserControl} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...