2016-07-01 52 views
0

有什麼方法可以使用與MainWindow使用相同ViewModel的新窗口? 原因是我有一個數據網格,我想要插入,刪除項目,更新等等。但是,當涉及到插入我想在一個單獨的窗口中,如在你點擊,打開另一個窗口並從那裏插入。 但據我所見,兩個視圖不可能使用相同的ViewWModel。 任何想法?MVVM使用相同ViewModel的新窗口

+0

相同的ViewModel類型或相同的實例? – lokusking

+2

視圖模型只是一個對象 - 您只是使用對象的引用,所以沒有理由不這樣做。這就是說你可能不想這樣做。至少要查看每行可能映射到插入視圖的視圖模型 – Murph

+0

爲什麼這是downvoted並投票結束?這是一個有關編程的常見問題.... – Liero

回答

-1

我希望,

如果設置了新窗口的所有者作爲主窗口意味着新的窗口,可以使用主窗口的視圖模型。

例如,

Window newWindow= new Window(); 
newWindow.Owner = App.Current.MainWindow; 
0

在技術上是完全可能的,這是很容易做到的。 可以說你有兩個窗口Window1和Window2。在Window1ViewModel.cs

void BtnOpenNewWindow_Click(object sender, EventArgs e) 
{ 
    var window2= new Window2(); 
    window2.DataContext = this.DataContext; 
    window2.Show(); 
} 

或驗證碼

void OpenNewWindowCommand_Execute() 
{ 
    var window2= new Window2(); 
    window2.DataContext = this; 
    window2.Show(); 
} 

然而,這是值得懷疑它是否是一個好習慣:

,你可以有這樣的代碼在Window1.xaml.cs。如何在視圖模型之間共享代碼或數據有更好的方法。實際上它只與視圖模型無關,它們是一般的面向對象原則。

要共享的ViewModels之間的代碼,你可以使用繼承:

abstract CommonViewModel 
Window1ViewModel extends CommonViewModel 
Window2ViewModel extends CommonViewModel 

,你可以看到,它保持1:視圖和視圖模型之間一對一的關係。

要共享的ViewModels之間的數據,你可以從不同的ViewModels

var common = new CommonDataOrLogic(); //this is usually model 
var viewmodel1 = Window1ViewModel(common); 
var viewmodel2 = Window2ViewModel(common); 

參考實例,並有很多的方式,你可以使用: 辛格爾頓,服務定位,國際奧委會,EventAggregator等。

相關問題