我在一个数据透视控件中有一个gridview,我想在点击一个griditem(带有一个项目ID)时在viewmodel上调用一个方法。我正在使用Template10进行UWP项目
我的xaml看起来像:
<Pivot Name="FeedsPivot" ItemsSource="{Binding Feeds, Mode=OneWay}">
<Pivot.ItemTemplate>
<DataTemplate x:DataType="models:Feed">
<GridView Name="ArticlesGridView" ItemsSource="{Binding Articles, Mode=OneWay}">
<GridView.ItemTemplate>
<DataTemplate>
<userControls:FeedControl />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</DataTemplate>
</Pivot.ItemTemplate>
</Pivot>
我以为我可以在gridview上使用这样的东西:
ItemClick="{Binding ClickCommand, ElementName=ViewModel}"
但是我总是在viewmodel上下文中将对象引用设置为对象的实例。
视图模型在页面中引用,如:
<Page.DataContext>
<vm:MainPageViewModel x:Name="ViewModel" />
</Page.DataContext>
我还尝试给页面命名并在 ElementName
中使用它有关最佳做法的任何帮助吗? Tnx提前
答案 0 :(得分:1)
我以为我可以在gridview上使用类似的东西:ItemClick =&#34; {Binding ClickCommand,ElementName = ViewModel}&#34;
我们无法直接将Binding
对象设置为ItemClick事件。在您的senario中,建议使用XamlBehaviors SDK。我们可以使用CallMethodAction作为Itemclick
EventTriggerBehavior,如下所示,请注意为IsItemClickEnable
启用GridView
。
XAML代码如下:
<GridView Name="ArticlesGridView" ItemsSource="{Binding feeds, Mode=OneWay}" IsItemClickEnabled="True" >
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="ItemClick">
<Core:CallMethodAction TargetObject="{Binding DataContext, ElementName=root, Mode=OneWay}" MethodName="ArticlesGridView_ItemClick" />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<GridView.ItemTemplate>
<DataTemplate x:DataType="models:Vipclass">
...
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</StackPanel>
MainPageViewModel.cs
中的代码如下:
public void ArticlesGridView_ItemClick(object sender, ItemClickEventArgs e)
{
...
}
上面代码段中的ElementName
绑定是页面对象。有关如何使用和安装XamlBehaviors
的详细信息,请参阅wiki of XamlBehaviors。您也可以通过Xaml.Behaviors Nuget包安装SDK。