Я потратил много времени на изучение возможностей обмена объектами между виртуальными машинами и пришел к успешному решению, но это не совсем элегантно:
Допустим, я хочу отправить из VM1 объект _testObject класса TestClass, который отображается в V1, причем DataContext, очевидно, является VM1 в VM2, и отобразить его в представлении V2.
public class VM1: ViewModelBase
{
...
public VM1 ()
{
...
Messenger.Default.Register <bool> (this, "isLoaded" t => Messenger.Default.Send<TestClass> (_testObject "myObject"));
}
...
}
public partial class V2: PhoneApplicationPage
{
public V2 ()
{
InitializeComponent ();
}
protected override void OnNavigatedTo (System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Register <TestClass> (this.DataContext "myObject", mo => (this.DataContext and VM2). PropertyInVM2 = mo);
Messenger.Default.Send <bool> (true, "isLoaded");
base.OnNavigatedTo (e);
}
protected override void OnNavigatedFrom (System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Unregister <TestClass> (this.DataContext "myObject");
base.OnNavigatedFrom (e);
}
}
Таким образом, если приложение переходит на V2, оно ждет, пока страница не будет создана, затем отправляет сообщение «isLoaded», захваченное в VM1, а затем VM1 отправляет сообщение с объектами, которые вам нужны, в VM2.
Нет, мне не нравится это, и я не хочу в коде bihnd. Кто-нибудь может посоветовать мне более элегантный способ?