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

3
我是一名有帮助的助手,以下是您需要翻译的内容:

我正在创建一个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个回答

7
因为您的视图模型实际上不是一个元素,所以您无法使用ElementName进行绑定。在您的情况下,正确的解决方案是给您的页面命名(x:Name="Page"),并绑定到它的DataContext
<Core:CallMethodAction 
   MethodName="OnButton_Click"
   TargetObject="{Binding Path=DataContext, ElementName=Page, Mode=OneWay}" />

你是XAML之神。我曾经尝试使用RelativeSource和AncestorType等方法,但仍然很困难。如果你能指导我一些帮助你理解这个问题的资源,我将不胜感激。 - Tony D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接