2016-11-20 31 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を試してみると本当に苦労しました。あなたがこのことを理解してくれたリソースを教えていただければ幸いです。 –

関連する問題