2016-03-21 2 views
0

J'ai une page, sur laquelle j'ai une vue liste et sa source d'élément est liée à une propriété Observable Collection, qui est bien sûr non statique. Ma question est comment puis-je accéder ou modifier cette collection en dehors de la classe Page sur laquelle réside cette liste. Je veux changer cette collection à l'extérieur, parce que je veux changer ou ajouter de nouveaux articles à ce ListView d'autres pages aussi bien.UWP comment modifier Liaison ListView Colletion observable en dehors de la classe de pages

Répondre

2

Je résous ce problème avec une propriété statique dans mon App.xaml.cs. Je peux donc accéder à mon Repository/Collection depuis n'importe quelle page que je veux. Chaque fois que je navigue sur la page, je vais accéder à App.MyCollection via ma propriété liée.

Vous pouvez créer une propriété dans laquelle votre accesseur créerait une nouvelle ObervableCollection (App.MyCollection); si le membre privé actuel est null.

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; 
     } 
    } 

Lorsque vous voulez changer quelque chose sur les propriétés de la classe dans la liste, puis seulement l'accès dans App .Historique des commandes.

La seule chose que vous devez prendre en charge est dans votre classe OrderHistory:

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

Je ne reçois pas WHT proposez-vous exactement, pouvez-vous préciser avec un code s'il vous plaît? Merci. P.S: J'ai essayé de créer une propriété publique statique et lui ai assigné cette collection privée. Et puis j'ai fait des changements, mais les changements se produisent uniquement dans cette propriété statique, et mes éléments ListView ne sont pas mis à jour. –

+0

J'ai édité le post. S'il vous plaît jeter un oeil si cela vous aide. – wuerzelchen

+0

merci beaucoup c'est facile à comprendre et ça m'a aidé :) –