У меня есть ViewModel, который содержит ObservableCollection. Эта коллекция постоянно обновляется. Теперь я хочу поделиться этим ObservableCollection с другим ViewModel.share observableCollection from ViewModels
VM1
public Class VM1
{
private ObservableCollection<CameraPackage> _cameraPackagesPerScenes = new ObservableCollection<CameraPackage>();
public ObservableCollection<CameraPackage> CameraPackagesPerScenes
{
get { return _cameraPackagesPerScenes; }
set { _cameraPackagesPerScenes = value; RaisePropertyChanged(); }
}
public VM1
{
var SCFunctions = new SharedCollectionLayer();
SCFunctions.AddToCameraPackagesPerSceneAndPartials(CameraPackagesPerScene);
}
}
Теперь я хочу, чтобы использовать тот же ObservableCollection в VM2. Как мне это сделать? Я уже пытался создать новый класс, который содержит ObservableCollection, который я получаю, чтобы получить данные в коллекции, но когда я пытаюсь получить его из другой виртуальной машины, он становится нулевым.
public class SharedCollectionLayer
{
private ObservableCollection<CameraPackage> _cameraPackagesPerScenes = new ObservableCollection<CameraPackage>();
public ObservableCollection<CameraPackage> CameraPackagesPerScenes
get { return _cameraPackagesPerScenes ; }
set { _cameraPackagesPerScenes = value; RaisePropertyChanged(); }
}
}
public ObservableCollection<CameraPackage> GetCameraPackagesPerSceneAndPartials()
{
var CameraPackagesPerScene = new ObservableCollection<CameraPackage>();
foreach (CameraPackage camerapackage in CameraPackagesPerSceneAndPartials)
{
CameraPackagesPerScene.Add(camerapackage);
}
return CameraPackagesPerScene;
}
public void AddToCameraPackages(ObservableCollection<CameraPackage> CameraPackagesPerScene)
{
foreach(CameraPackage camerapackage in CameraPackagesPerScene)
{
CameraPackagesPerSceneAndPartials.Add(camerapackage);
}
}
}
И в VM2 Я пытаюсь получить элементы в наблюдаемом наборе, но он возвращает пустой.
VM2
public Class VM2
{
private ObservableCollection<CameraPackage> _cameraPackagesPerScene = new ObservableCollection<CameraPackage>();
public ObservableCollection<CameraPackage> CameraPackagesPerScene
{
get { return _cameraPackagesPerScene; }
set { _cameraPackagesPerScene = value; RaisePropertyChanged(); }
}
public VM
{
var SCFunctions = new SharedCollectionLayer();
CameraPackagesPerScene = SCFunctions.GetCameraPackagesPerSceneAndPartials();
}
}
Я новичок в WPF и MVVM, так, что это правильный подход совместного использования ObservableCollections между ViewModels?
Я не понимаю ваш SharedCollectionLayer. В функции GetCameraPackagesPerSceneAndPartials, где инициализируется CameraPackagesPerSceneAndPartials? Кроме того, вы хотите, чтобы оба режима просмотра были синхронизированы? Значение, когда новый элемент добавлен в camerapackagespersen в vm2, вы хотите, чтобы он отражался и в vm1? –
@MonilGandhi Я обновил VM1, чтобы показать, как я получаю данные из наблюдаемого коллекционирования в sharedCollectionLayer. Этот шаг работает, но когда я пытаюсь получить его в VM2, он каким-то образом опустошает коллекцию в sharedCollectionLayer. – Phil