2016-06-03 20 views
4

Ich habe eine ListView, die an eine ObservableCollection bestehend aus viewModels gebunden ist.Xamarin Forms ListView ObservableCollection nicht aktualisieren

das Ansichtsmodell sieht wie folgt aus:

public string Id{ get; set; } 
public string Name{ get; set; } 
public bool HasId 
{ 
    get { return !(String.IsNullOrEmpty(Id)); } 
} 

im Frontend XAML:

<ListView x:Name="MyList" ItemsSource="{Binding MyList}"> 
    <ListView.ItemTemplate> 
    <DataTemplate> 
     <ViewCell> 
     <StackLayout> 
      <Label Text="{Binding Name" FontSize="Small"/> 
      <StackLayout Spacing="20"> 
      <Entry Text="{Binding Id}"/> 
      <Button Text="Create Profile" IsEnabled="False"> 
       <Button.Triggers> 
       <DataTrigger TargetType="Button" Binding="{Binding HasId}" Value="True"> 
        <Setter Property="IsEnabled" Value="True"/> 
       </DataTrigger> 
       </Button.Triggers> 
      </Button> 
      </StackLayout> 
     </StackLayout> 
     </ViewCell> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Gewünschtes Ergebnis: wenn Benutzertypen in Eintrag (zu Id binded) sollte die Schaltfläche aktiviert werden .

Tatsächliches Ergebnis: wenn Benutzertypen in Eintrag, (Erraten ich die ObservableCollection verursachen die Änderung innerhalb des viewmodel nicht sehen) nichts passiert

Hinweis: Wenn ich hinzufügen/löschen ein Element zu/von Die ObservableCollection, die Ansicht aktualisiert (wie erwartet).

Alle Vorschläge/Ideen werden sehr geschätzt!

+0

Ihre ViewModel-Klasse muss implementiert werden INotifyPropertyChanged – Jason

+0

@Jason thanks! Ich habe es nicht verstanden, als ich die Dokumentation zum ersten Mal gelesen habe, aber jetzt macht es Sinn. – indubitablee

Antwort

6

Sie implementieren müssen INotifyPropertyChanged auf der Viewmodel-Klasse zu setzen.

die ObservableCollection<T> Klasse behandelt nur Benachrichtigungen darüber, ob die Sammlung selbst hat änderte es ems hinzugefügt/entfernt/etc. Es behandelt keine Benachrichtigungen, wenn Eigenschaften der einzelnen Elemente selbst geändert werden.

0

Der Eintrag hat einen Ereignisnamen aufgerufen OnTextChanged (so etwas wie das, was Sie auf die Schaltfläche aktivieren können, kann dies hinter in XAML oder im Code erfolgen.

Hinsichtlich des Listview nicht aktualisiert werden haben Sie versucht, „MyList“ ObservableCollection wieder? was die OnPropertyChanged Ereignis des View-Modell auslösen?

Verwandte Themen