如何将用户控件上的按钮绑定到父控件中的命令?

时间:2019-04-23 10:09:23

标签: wpf vb.net xaml binding

我在将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>

我已经尝试了一些变体。 我要避免的是按MainElement的MainName进行命名,因为我可能会在其他视图中使用UserControl

2 个答案:

答案 0 :(得分:1)

我做了一个实验。

这对我有用:

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

注意:

DataContext.CommandName

您可以在菜单项上使用命令,而不是eventtocommand。

答案 1 :(得分:0)

请尝试将AncestorLevel设置为2,因为默认的1将绑定到SearchView而不是MainView

Command="{Binding ResetCommand , RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=2, AncestorType=UserControl} }