2016-12-01 22 views
6

Aşağıdaki sorun var, benim görüşüme göre bir Liste görünümüm var. Bu liste görünümünde iki butona sahip olmak istiyorum. Öğeyi düzenlemek için bir, silmek için.Xamarin Formlar Düğmesi Bir ListView içinde bağlama komutunu bağlama

İşte benim ViewModel içinde

<ListView Grid.Row="1" x:Name="ArbeitsEinträgeList" ItemsSource="{Binding EintragList}" SelectedItem="{Binding SelectedItem}"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.View> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Label Text="{Binding Titel}" TextColor="{Binding Fehlerhaft, Converter={StaticResource EintragartConverter}}"></Label> <Label Grid.Column="1" Text="{Binding Beginn}" TextColor="{Binding BeginnManuell, Converter={StaticResource EintragartConverter}}"></Label> <Label Grid.Column="2" Text="{Binding Ende}" TextColor="{Binding EndeManuell, Converter={StaticResource EintragartConverter}}"></Label> <Button Grid.Column="3" Command="{Binding EditEintragCommand}" Text="&#xf040;" FontFamily="../Ressources/fontawesome.ttf#FontAwesome"></Button> <Button Grid.Column="4" Command="{Binding DeleteEintragCommand}" Text="&#xF00D;" FontFamily="../Ressources/fontawesome.ttf#FontAwesome"></Button> </Grid> </ViewCell.View> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> 

XAML
benim liste görünümü olan ihtiyacım her şey, ben liste görünümü bir düğme ile komutları test ettik ve mükemmel çalışır. Ben bağlama, mesajın üzerine geldiğinizde

"sembolü çözülemiyor '...'" Eğer EintragList bir öğeye bağlamak çünkü var

Cannot resolve symbol

cevap

17

Oca,

Bir liste görünümünü kullandıysanız ve komutlar bağlama ItemSource her model bağlanma bağlamında takılır, DataTemplate içeride olduğundan

.

bu çevrede bir yolu takip yapacağız geçerli:.

<ListView Grid.Row="1" x:Name="ArbeitsEinträgeList" ItemsSource="{Binding EintragList}" SelectedItem="{Binding SelectedItem}"> 
     <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
      <ViewCell.View> 
       <Grid x:Name="Item"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <Label Text="{Binding Titel}" TextColor="{Binding Fehlerhaft, Converter={StaticResource EintragartConverter}}"></Label> 
       <Label Grid.Column="1" Text="{Binding Beginn}" TextColor="{Binding BeginnManuell, Converter={StaticResource EintragartConverter}}"></Label> 
       <Label Grid.Column="2" Text="{Binding Ende}" TextColor="{Binding EndeManuell, Converter={StaticResource EintragartConverter}}"></Label> 
       <Button Grid.Column="3" BindingContext="{Binding Source={x:Reference ArbeitsEinträgeList}, Path=BindingContext}" Command="{Binding EditEintragCommand}" CommandParameter="{Binding Source={x:Reference Item}, Path=BindingContext}" Text="&#xf040;" FontFamily="../Ressources/fontawesome.ttf#FontAwesome"></Button> 
       <Button Grid.Column="4" BindingContext="{Binding Source={x:Reference ArbeitsEinträgeList}, Path=BindingContext}" Command="{Binding DeleteEintragCommand}" CommandParameter="{Binding Source={x:Reference Item}, Path=BindingContext}" Text="&#xF00D;" FontFamily="../Ressources/fontawesome.ttf#FontAwesome"></Button> 
       </Grid> 
      </ViewCell.View> 
      </ViewCell> 
     </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Yani liste görünümünün bağlama bağlamı başvuru bağlama kaynak ayarlayın (yani sizin bakış model ya da "ArbeitsEinträgeList" seçeneğini de ayarlayabilirsiniz Komut parametresi, her bir öğenin bağlama bağlamı olacaktır .. Görebildiğiniz gibi ızgarada x: Name = "Öğe" ve CommandParameter = "{Binding Source = {x: Reference Item}, Path = BindingContext}".

Basitçe, bu şekilde komutlar bildirmek, görünüm modelinizde genel bir komut tanımlamanıza ve komutun komut parametresiyle yürütüldüğüne izin verir. Bireysel öğenin bağlanma içeriği.

public ICommand DeleteEintragCommand 
     { 
      get 
      { 
       return new Command((e) => 
        { 
         var item = (e as MyModelObject); 
         // delete logic on item 
        }); 
      } 
     } 
+1

Çok teşekkür ederim. Çözümünüz çalışıyor. Thumbs up :) – JanMer

+0

'DataTemplate' diğer dosyadan tanımlanmış ve şu şekilde alındığında ne olur:' '? – mr5

6

görünüyor - (senin bağlayıcı yüzden mülkiyet Beginn ve Ende gibi metin özelliklerine göre). Ve komut-bağlama, kendi listenizden değil, listenizden tek bir öğeye bir komuta ulaşmaya çalışır.

Seçenek 1: Komutu öğe sınıfınızda ayarlarsınız ve oraya dokunabilirsiniz.

Seçenek 2: senin kaynağın sayfa (ve tek bir öğe) olması gerektiğini bağlayıcı söyle: Sayfalarınız kök elemanın adı ayarlandığını,

Command="{Binding BindingContext.EditEintragCommand, Source={x:Reference Name=MyPageName}}" 

Sadece emin olmak x:Name="MyPageName"

Ek olarak

CommandParameter="{Binding .}" 

:

öğe komutunu ateşler, hangi sonra da bir nesne olarak komuta göndermek CommandParameter özelliği ayarlayabilirsiniz, bilmek için W Eğer listenizdeki öğeleri göstermek için harici şablonlar kullanıyorsanız, something I described in another answer (aynı prensip) deneyebilirsiniz.

İlgili konular