2016-03-21 10 views
0

Ich habe eine Seite, auf der ich eine Listenansicht habe und ihre Elementquelle an eine Observable Collection-Eigenschaft gebunden ist, die natürlich nicht statisch ist. Meine Frage ist, wie kann ich auf diese Sammlung außerhalb der Page-Klasse, auf der sich diese ListView befindet, zugreifen oder ändern. Ich möchte diese Sammlung außerhalb ändern, weil ich neue Elemente zu diesem ListView von anderen Seiten auch ändern oder hinzufügen möchte.UWP Wie man ListView Binding ändert Observable Colletion außerhalb der Seitenklasse

Antwort

2

Ich löse dieses Problem mit einer statischen Eigenschaft in meiner App.xaml.cs. So kann ich von jeder beliebigen Seite aus auf mein Repository/meine Sammlung zugreifen. Jedes Mal, wenn ich auf die Seite navigiere, gehe ich über meine gebundene Eigenschaft auf App.MyCollection.

Sie können eine Eigenschaft erstellen, bei der der Getter eine neue ObervableCollection (App.MyCollection) erstellen würde. Wenn das aktuelle private Mitglied null ist.

App.xaml.cs

private static IEnumerable<OrderHistory> _orderHistory; 
public static IEnumerable<OrderHistory> OrderHistory 
{ 
    get 
    { 
     if (_orderHistory == null) 
      _orderHistory = new ObservableCollection<OrderHistory>(); 
      return _orderHistory; 
     } 
    set 
    { 
     if (_orderHistory != value) 
      _orderHistory = value; 
     } 
    } 
} 

CodeBehind.xaml.cs

private ObservableCollection<OrderHistory> _orderHistoryList; 
public ObservableCollection<OrderHistory> OrderHistoryList 
    { 
     get 
     { 
      if (_orderHistoryList == null) 
       _orderHistoryList = new ObservableCollection<OrderHistory>(App.WorkOrderHistory); 
      return _orderHistoryList; 
     } 
    } 

Wenn Sie etwas wollen auf die Eigenschaften der Klasse in der Liste ändern, dann zugreifen es nur in App .Bestellverlauf.

Die denken nur darauf achten müssen von in Ihrem OrderHistory Klasse:

public class OrderHistory : INotifyPropertyChanged 
{ 
    private bool _isAvailable; 
    public bool IsAvailable { 
     get 
     { 
      return _isAvailable; 
     } 
     set 
     { 
      if(_isAvailable != value) 
      { 
       _isAvailable = value; 
       this.NotifyPropertyChanged(); 
      } 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

ich nicht immer wht genau schlagen Sie vor, können Sie es mit einigen Code klären bitte? Vielen Dank. P.S: Ich habe versucht, eine statische öffentliche Eigenschaft zu erstellen und diese private Sammlung zugewiesen. Und dann habe ich Änderungen daran vorgenommen, aber Änderungen treten nur in dieser statischen Eigenschaft auf und meine ListView-Elemente werden nicht aktualisiert. –

+0

Ich habe den Beitrag bearbeitet. Bitte schau, ob dir das weiterhilft. – wuerzelchen

+0

vielen dank es ist einfach zu verstehen und es hat mir geholfen :) –

Verwandte Themen