Вы можете создать класс модели, от которого зависят обе модели представления. Сама модель содержала бы наблюдаемую коллекцию, в то время как модели представления ссылаются на наблюдаемую коллекцию. Это хороший способ обмена данными между различными моделями представлений на протяжении всего жизненного цикла вашего приложения. Обычно вы хотите сделать модель одноэлементной, чтобы гарантировать, что это действительно те же данные.
Если вы не хотите использовать центр обмена сообщениями, вы можете использовать инфраструктуру MVVM, которая имеет и другие преимущества. Я использую Prism для упрощения навигации, и вы можете передавать параметры навигации вместе.
Наконец, и обычно это не лучший вариант, вы можете хранить данные в объекте App. Вы можете установить значения в коллекции свойств. Это не рекомендуется для сложных объектов.
EDIT Сначала у вас будет некоторый объект передачи данных, который будет содержать ObservableCollection, если только вы не держите целые числа или что-то в этом роде.
public class MyDTO
{
//fields for Data Transfer Object
}
DTO часто входят в ваши модели, но иногда вам нужен составной класс для хранения DTO и коллекций DTO
Вот простая модель, которая будет содержать вашу ObservableCollection
public class MyCollectionModel
{
#region Singleton Pattern
private MyCollectionModel()
{
}
public static MyCollectionModel Instance { get; } = new MyCollectionModel();
#endregion
private ObservableCollection<MyDTO> _dtos;
public ObservableCollection<MyDTO> MyObservableCollection
{
get { return _dtos; }
set { _dtos = value; }
}
}
Обратите внимание, что это реализует шаблон Singleton. Это может даже повлиять на INotifyPropertyChanged.
Затем ваши модели представлений, представьте MyVM1 и MyVM2, будут ссылаться на ObservableCollection в вашей модели с чем-то вроде этого.
public class MyVM1 : INotifyPropertyChanged // Do the same with MyVM2, which would be the binding context for view 2
{
private MyCollectionModel _model;
public MyVM1 ()
{
_model = MyCollectionModel.Instance;
}
private ObservableCollection<MyDTO> myVar;
public ObservableCollection<MyDTO> MyProperty //Bind to this in your View1
{
get
{
return _model.MyObservableCollection;
}
set
{
myVar = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Я ухожу здесь довольно много вещей, и на самом деле у меня нет времени на создание всего проекта только для тестирования. Надеюсь, это поможет.