我花了很多時間尋找解決方案共享虛擬機之間的物體,我來到了一個成功的解決方案中,但不完全是最優雅:傳遞一個對象到VM視圖
比方說,我想要從VM1發送V1中顯示的TestClass類的_testObject對象,該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,它等到創建的頁面,然後將其在VM1捕捉消息「isLoaded」,然後VM1發送一條消息,你需要VM2的對象。
不,我不喜歡這種方式,我不想在代碼bihnd。任何人都可以建議我更優雅的方式?