UWP如何改变页面外的ListView绑定Observable Colletionclass

UWP how to change ListView binding Observable Colletion outside the page class

我有一个页面,上面有一个列表视图,它的项目源绑定到一个 Observable 集合 属性,这当然是非静态的。 我的问题是,如何在列表视图所在的页面 class 之外访问或更改该集合。 我想在外部更改该集合,因为我也想从其他页面更改或向该 ListView 添加新项目。

我正在 App.xaml.cs 中使用静态 属性 解决这个问题。 所以我可以从我想要的任何页面访问我的 Repository/Collection。 每次导航到该页面时,我都会通过绑定的 属性.

访问 App.MyCollection

您可以创建一个 属性,您的 getter 将创建一个新的 ObervableCollection(App.MyCollection); 如果当前私有成员为空。

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

当您想更改列表中 class 的属性时,只需在 App.OrderHistory 中访问即可。

您唯一需要注意的是您的 OrderHistory Class:

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