2016-04-13 12 views
3

Prism ile ayrıntılı sayfada gezinmek için ListView öğesinin ItemTapped'ini nasıl bağlayacağımı anlamaya çalışıyorum. Ben DelegateCommand ile deneyin ama bir hata var:Ayrıntı sayfasını gezinmek için ViewModel'deki ListViewt öğesinin ItemTapped özelliği nasıl bağlanır?

Exception is: XamlParseException - Position 15:7. No Property of name ItemTapped found

Görünüm:

<ListView 
    ItemsSource="{Binding UsersList}" 
    SelectedItem="{Binding SelectedUser}" 
    ItemTapped="{Binding ShowUserDetail}" 
    RowHeight="65" > 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout Padding="20" HorizontalOptions="FillAndExpand"> 
      <Label Text="{Binding Name}" TextColor="Blue" FontSize="15"/> 
      <Label Text="{Binding Email}" TextColor="Gray" FontSize="11"/> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

ViewModel:

public class UsersViewModel : BindableBase 
{ 

    ..... some bindable objects 

    INavigationService _navigationService; 
    public DelegateCommand ShowUserDetail { get; set; } 

    public UsersViewModel (INavigationService navigationService) 
    { 
     _navigationService = navigationService; 
     ShowUserDetail = new DelegateCommand(OnShowUserDetail); 
    } 

    public void OnShowUserDetail() 
    { 
     var par = new NavigationParameters(); 
     par.Add("user", SelectedUser); 
     _navigationService.Navigate("UserDetail", par); 
    } 

    .... 

Bu DelegateCommand bağlayan

<Button> navigasyon çalışır. Muhtemelen bu, Prism ile ilgili değil, ancak bunun için herhangi bir örnek bulamıyorum. Teşekkürler.

cevap

3

A Düğmesinin, bağlanmak için bir Command özelliği vardır, ListView öğesinin ItemTapped bir eventhandler gerektiren bir olaydır. Eğer bağlama kullanmak isterseniz, bir davranışı kullanmak gerekecektir:

<ListView 
    ItemsSource="{Binding UsersList}" 
    SelectedItem="{Binding SelectedUser}" 
    RowHeight="65" > 
    <ListView.Behaviors> 
    <b:EventToCommand EventName="ItemTapped" Command="{Binding ShowUserDetail}" /> 
    </ListView.Behaviors> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout Padding="20" HorizontalOptions="FillAndExpand"> 
      <Label Text="{Binding Name}" TextColor="Blue" FontSize="15"/> 
      <Label Text="{Binding Email}" TextColor="Gray" FontSize="11"/> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Kaynak: https://forums.xamarin.com/discussion/comment/180600/#Comment_180600

DÜZENLEME: EventToCommandthis NuGet package bir davranıştır.

+0

Hızlı yanıt için teşekkürler – vsasa

+0

Tabii ki, bugün bunu denedikten sonra – vsasa

+0

Burada bir belge var: https://developer.xamarin.com/guides/xamarin-forms/behaviors/reusable/event-to-command- Davranış/ Ancak, bir nuget paketi https://www.nuget.org/packages/Xamarin.Forms.Behaviors/ da var. EventToCommandBehavior adında özel bir yöntem mi yazmalıyım? Üzgünüm, xamarin’de nispeten yeniyim. – vsasa

1

Barts snippet'inin bir şekilde işe yaradığına inanıyorum, ama gerçekten nasıl ve ne yapmam gerektiğini bilmiyorum. Daha iyi bir açıklama ve bazı çalışma kodu örneği öneririm.

Çalışan bir çözüm buldum. Bu hattı set başlığında

<ListView 
    ItemsSource="{Binding UsersList}" 
    SelectedItem="{Binding SelectedUser}"> 

    <b:Interaction.Behaviors> 
     <b:BehaviorCollection> 
      <b:EventToCommand EventName="ItemTapped" Command="{Binding ShowUserDetail}"/> 
     </b:BehaviorCollection> 
    </b:Interaction.Behaviors> 
    ... 

(eşlenen b:

(taşınabilir ve tüm alt projelerin iOS, Android ...) "formları davranışları Xamarin" Nuget paketini ekledikten sonra, ben ListView bu katma) ad alanına:

xmlns:b="clr-namespace:Xamarin.Behaviors;assembly=Xamarin.Behaviors" 

bir şey daha, iOS platformu için bu (çünkü hata istisna, o) burada xamarin-behaviors-with-xamarin-forms-ios açıklanandan AppDelegate.cs/FinishedLaunching yönteminde yerleştirilmelidir

Xamarin.Behaviors.Infrastructure.Init(); 

Şimdi "ItemTapped" düzgün çalışıyor.

İlgili konular