2016-11-20 75 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。如果你可以指向我給了你這個理解我們將不勝感激的任何資源。 –

相關問題