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

时间:2016-11-20 20:25:05

标签: c# wpf xaml mvvm uwp

我正在创建一个UWP应用程序,到目前为止,我一直在使用CallMethodAction从ViewModel调用方法,它运行正常。

但是现在,我尝试对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>

我尝试了几种方法来访问父DataContext,但我发现没有办法。

1 个答案:

答案 0 :(得分:4)

由于您的视图模型实际上不是元素,因此您无法将其与ElementName一起用于绑定。

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

<Core:CallMethodAction 
   MethodName="OnButton_Click"
   TargetObject="{Binding Path=DataContext, ElementName=Page, Mode=OneWay}" />