2016-07-01 14 views
0

MainWindowと同じViewModelを使用する新しいウィンドウを作成する方法はありますか? これは、データグリッドを挿入、削除、更新などしたいというデータグリッドがあるためです。ただし、挿入するときは別のウィンドウで行いたいので、クリックすると別のウィンドウが開きますウィンドウから挿入してください。 しかし、私が見た限りでは、2つのビューが同じViewWModelを使用することはできません。 アイデアMVVM同じViewModelを使用する新しいウィンドウ

+0

同じViewModel-Typeまたは同じインスタンス? – lokusking

+2

ビューモデルは単なるオブジェクトであり、オブジェクトへの参照を使用しているだけなので、そうでない理由はありません。それはおそらくあなたがこれをしたくないと言いました。少なくとも、挿入ビューにマップされる可能性のある行ごとのビューモデルを見てください。 – Murph

+0

なぜこれを下降させて閉じようとしたのですか?それは定期的な質問に関連するプログラミングです.... – Liero

答えて

-1

私は願って、メインウィンドウが新しいウィンドウがメインウィンドウのビューモデルを使用することができる手段として、新しいウィンドウの所有者を設定した場合

。例については

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

技術的には完全に可能であり、それを行うのは非常に簡単です。 Window1とWindow2の2つのウィンドウがあるとします。

あなたはWindow1.xaml.csでこのコードを持つことができます。Window1ViewModel.cs

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

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

またはこのコードをしかし、それは良い習慣であるかどうかは疑問です。ビューモデル間でコードやデータを共有する方法があります。実際、それはビューモデルにのみ関連するものではなく、一般的なOOPの原則です。ビューとのviewmodel間の1の関係:あなたが見ることができるよう

abstract CommonViewModel 
Window1ViewModel extends CommonViewModel 
Window2ViewModel extends CommonViewModel 

が、それは1を保持します:

はのviewmodels間でコードを共有するには、継承を使用することができます。

のviewmodelsの間でデータを共有するには、あなたが異なるのviewmodelsから

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

を単一のインスタンスを参照することができますし、使用できるパターンが多いが: シングルトン、ServiceLocatorは、IoCの、EventAggregator、など。

関連する問題