#wpf #vb.net #xaml #binding
#wpf #vb.net #xaml #привязка
Вопрос:
У меня проблема с привязкой моего 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 по его имени элемента, поскольку я хочу потенциально использовать UserControl
в других представлениях.
Ответ №1:
Я провел эксперимент.
Это работает для меня:
<MenuItem Header="Reset"
Command="{Binding DataContext.ResetCommand , RelativeSource={RelativeSource AncestorType=UserControl} }"/>
Примечание:
DataContext.CommandName
Вы можете использовать command в menuitem, а не eventtocommand.
Комментарии:
1. Итак, я уже был более или менее прав, но я все еще не могу заставить его выполнять мой метод, когда я нажимаю на него, что для меня странно. MainView находится в DialogWindow, который является частью ContainerControlledLifetimeManager, но находится рядом с этим в значительной степени barebone, поэтому на данный момент я действительно просто догадываюсь, в чем моя проблема. Я также ничего не получаю от отладчика, почему он не привязан или почему он не выполняется.
Ответ №2:
Попробуйте установить AncestorLevel
на 2
, поскольку значение по умолчанию 1
будет привязываться к SearchView
, а не к MainView
:
Command="{Binding ResetCommand , RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=2, AncestorType=UserControl} }