我正在创建一个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
,但我发现没有办法。
答案 0 :(得分:4)
由于您的视图模型实际上不是元素,因此您无法将其与ElementName
一起用于绑定。
在您的情况下,正确的解决方案是为您的网页命名(x:Name="Page"
)并绑定到其DataContext
:
<Core:CallMethodAction
MethodName="OnButton_Click"
TargetObject="{Binding Path=DataContext, ElementName=Page, Mode=OneWay}" />