从XAML中的父DataContext将CallMethodAction中的TargetObject设置为ViewModel

Car*_*los 2 c# wpf xaml mvvm uwp

我正在创建一个UWP应用,到目前为止,我一直在使用CallMethodActionViewModel中的调用方法,它运行良好。

但是现在,我正在尝试对内的某些按钮使用相同的方法ListView,并且当我单击按钮时什么也没有发生。XAML代码是:

<Page.DataContext>
    <vm:RoomPageViewModel x:Name="ViewModel" />
</Page.DataContext>

<ListView x:Name="ActuatorListView"
          ItemsSource="{x:Bind ViewModel.Room.Actuators}">
  <ListView.ItemTemplate>
     <DataTemplate x:DataType="data:Actuator">
        <Button x:Name="OnButton" Content="On">
           <Interactivity:Interaction.Behaviors>
                  <Core:EventTriggerBehavior 
                           EventName="Click" 
                           SourceObject="{Binding ElementName=OnButton}">
                     <Core:CallMethodAction 
                        MethodName="OnButton_Click"
                        TargetObject="{Binding ElementName=ViewModel, Mode=OneWay}" />
                  </Core:EventTriggerBehavior>
               </Interactivity:Interaction.Behaviors>
            </Button>                            
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

我尝试了几种访问父级的方法DataContext,但没有找到任何可行的方法。

Mar*_*und 5

因为您的视图模型实际上不是element,所以不能将其ElementName用于绑定。

针对您的情况,正确的解决方案是为您的页面命名(x:Name="Page")并绑定到其页面DataContext

<Core:CallMethodAction 
   MethodName="OnButton_Click"
   TargetObject="{Binding Path=DataContext, ElementName=Page, Mode=OneWay}" />
Run Code Online (Sandbox Code Playgroud)