2016-10-31 5 views
0

У меня есть gridview в элементе управления, и я хочу вызвать метод на viewmodel при щелчке элемента сетки (с идентификатором элемента). Я на UWP проект с Template10Gridview itemclick in pivot

Моя 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 заранее

ответ

1

Я думал, что я мог бы использовать что-то вроде этого на GridView: ItemClick = "{Binding Clickcommand, ElementName = ViewModel}"

Мы не можем непосредственно установить Binding объект ItemClick события. В вашем senario рекомендуется использовать SDK XamlBehaviors. Мы можем использовать 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. Вы также можете установить SDK на Xaml.Behaviors пакет Nuget.