2017-01-05 6 views
0

ich eine Liste von Objekten, die ich zu einem Listview binden an einem NavigationPageMVVM mit Listendaten auf verschiedenen Seiten Xamarin bildet

Heres Ansicht:

 <ListView HasUnevenRows="true" x:Name="note_list" HorizontalOptions="FillAndExpand" HeightRequest="50" ItemSelected="note_clicked"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ViewCell> 
         <StackLayout Margin="10, 0, 0, 0" HorizontalOptions="FillAndExpand" Orientation="Vertical" VerticalOptions="Fill"> 
          <StackLayout Margin="10 ,10, 10, 0" Orientation="Horizontal" HorizontalOptions="FillAndExpand"> 
           <Image IsVisible="{Binding responseRequired, Mode=TwoWay}" Source="icons/blue/warning" WidthRequest="20" HorizontalOptions="Start" Margin="0, 0, 0, 0"></Image> 
           <Label HorizontalOptions="Start" Margin="0, 0, 0, 0" FontSize="18" VerticalOptions="CenterAndExpand" Text="{Binding userId , Mode=TwoWay}"></Label> 
           <Label HorizontalTextAlignment="End" VerticalOptions="Center" HorizontalOptions="EndAndExpand" TextColor="#c1c1c1" FontSize="14" Text="{Binding daysFromPost , Mode=TwoWay}"></Label> 
          </StackLayout> 
          <StackLayout HorizontalOptions="Fill" Orientation="Vertical" Margin="10, -5, 10, 10"> 
           <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal" Margin="0, -2, 0, 0"> 
            <Label FontSize="14" TextColor="#c1c1c1" Text="to: "></Label> 
            <Label HorizontalOptions="StartAndExpand" FontSize="14" TextColor="#c1c1c1" Text="{Binding noteToo, Mode=TwoWay}"></Label> 
           </StackLayout> 
           <Label FontSize="14" TextColor="Gray" Text="{Binding note, Mode=TwoWay}"></Label> 
          </StackLayout> 
         </StackLayout> 
        </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

Stellen Sie sich vor, wenn ich auf einem Protokoll klicken, Es geht auf eine andere Seite mit den Protokolldetails und Optionen zum Ändern dieses Protokolls. Mit der MVVM-Methode zum Binden von Änderungen an der Modellansicht speichere ich die Änderungen und öffne dann die Detailnavigationsseite. Wenn die Liste der Protokolle jedoch wieder angezeigt wird, sind die Änderungen nicht sichtbar, bis die Seite aus irgendeinem Grund neu geladen wird. Sollte das Two-Way-Binding nicht dazu führen, dass die Änderungen in die Ansicht verschoben werden? Oder muss ich die Modellansicht manuell neu laden, indem ich OnAppering() überschreibe?

+0

Können Sie angeben, wie Sie Ihr ListView an eine Sammlung binden? Zeigen Sie auch Ihren Code für jedes Objekt, das BindingContext dieser Zellen ist. Es wäre die Klasse das hat responseRequired als eine Eigenschaft. – therealjohn

Antwort

1

Ohne irgendeinen anderen Code zu sehen, gehe ich davon aus, dass dieses Modell nicht länger mit der Sammlung von Log-Elementen auf der vorherigen Seite verknüpft ist, wenn Sie Ihr Log-Modell auf Ihrer Log-Detailseite übergeben haben.

Es gibt ein paar Möglichkeiten, um dies zu umgehen. Lassen Sie mich wissen, wenn Sie Code für eine der folgenden Möglichkeiten sehen möchten.

Eine Möglichkeit, die am einfachsten ist, wie Sie beschreiben, besteht darin, die Protokollauflistung in OnAppearing() zu aktualisieren.

Eine andere Methode, die ich verwende, ist ein MessagingCenter Abonnement, das Sie im Konstruktor Ihrer Log Collection-Seite abonnieren und nie abmelden. Dann würden Sie ein Ereignis von der Seite "Protokolldetails" senden, durch das die Sammlung aktualisiert wird. Dies ist nützlich, wenn Sie die Sammlung manchmal aktualisieren müssen, auch wenn OnAppearing() möglicherweise nicht erneut ausgeführt wird oder wenn Probleme mit Android auftreten, bei denen einfache Seitenereignisse zu Tode geprügelt werden. > :(

Doch wäre eine andere Art und Weise eine static Log Sammlung irgendwo definiert haben sein, die Ihre Login Sammlung Seite, und dann würde jede Änderung an einem einzigen Log binden würde aktualisieren, dass static Sammlung, so dass die static Sammlung würde immer Unabhängig davon, welche Seite die Änderungen enthält

Verwandte Themen