在视图模型之间更新 ObservableCollection

Update ObservableCollection between Viewmodels

我在两个 ViewModel 之间共享了一个 observableCollection。当我启动 viewmodel 时,两个 ViewModel 中的 observablecollections 都工作正常,但是当我在源 ObservableCollection 中进行更改时,它不会在第二个 ViewModel 的 ObservableCollection 中更新它。我怎样才能使第二个 observalbeCollection 接收第一个 ObservableCollection 中所做的更改。

虚拟机 1

public Class VM1
{
    private ObservableCollection<CameraPackage> _cameraPackagesPerScene = new ObservableCollection<CameraPackage>();
    public ObservableCollection<CameraPackage> CameraPackagesPerScene
    {
        get { return _cameraPackagesPerScene; }
        set { _cameraPackagesPerScene = value; RaisePropertyChanged(); }
    }
 }

VM2

public Class VM2
{
     public ObservableCollection<CameraPackage> CameraPackagesPerSceneAndPartials { get; set; }

     public VM2 (VM1 vm1)
     {
           CameraPackagesPerSceneAndPartials = new ObservableCollection<CameraPackage>(vm1.CameraPackagesPerScene);
     }
 }

您不应基于其他 OC 创建新的 ObservableCollection。只需将一个实例共享给两个 ViewModel:

public VM2 (VM1 vm1)
{
      CameraPackagesPerSceneAndPartials = vm1.CameraPackagesPerScene;
}

或者仅将集合注入第二个 ViewModel:

public VM2 (ObservableCollection<CameraPackage> cameraPackagesPerSceneAndPartials)
{
      CameraPackagesPerSceneAndPartials = cameraPackagesPerSceneAndPartials;
}

减少耦合的其他方法是使用EventAggregator or other event-based patterns

您可以使用 mvvmlight messenger 交换来自视图模型的消息。

这是执行此操作的好方法。请参阅下面的示例:

发送中:

// Sends a notification message with a Person as content.
var person = new Person { FirstName = "Marco", LastName = "Minerva" };
Messenger.Default.Send(new NotificationMessage<Person>(person, "Select"));

正在接收:

// Registers for incoming Notification messages.
Messenger.Default.Register<NotificationMessage<Person>>(this, (message) =>
{
    // Gets the Person object.
    var person = message.Content;

    // Checks the associated action.
    switch (message.Notification)
    {
        case "Select":
            break;
        case "Delete":
            break;
        default:
            break;
    }
});

来自教程:

https://marcominerva.wordpress.com/2014/06/25/how-to-send-string-and-content-messages-with-mvvm-light-messenger/