2016-11-20 82 views
1

我创建了一个UWP应用程序,到目前为止,我一直使用CallMethodAction从ViewModel调用方法,它工作正常。将CallMethodAction中的TargetObject设置为XAML中父级DataContext的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

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

在你的情况下,正确的解决办法是给你的页面的名称(x:Name="Page")并绑定到其DataContext

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

谢谢!问题解决了。 – Carlos

+0

你是一个XAML神。我真的很挣扎,这种尝试(除其他事项外)的RelativeSource和AncestorType。如果你可以指向我给了你这个理解我们将不胜感激的任何资源。 –

相关问题