2013-02-14 42 views
0

我是MVVM和WPF的新手。我正在使用MVVM Light來創建一個應用程序,其中包含一個DataGrid窗口內,其中有一個視圖模型(MainViewModel)和另一個窗口添加和編輯DataGrid中的記錄,也有自己的視圖模型(EditViewModel )。MVVM Light將參數傳遞給子視圖模型

我擔心的是我用來從MainViewModel打開添加/編輯窗口的方法。在MainViewModel中,我有一個屬性SelectedItem,它綁定到DataGrid的SelectedItem屬性和一個IsEdit布爾屬性,指示添加/編輯窗口是否應以添加或編輯模式啓動。

當添加/編輯窗口得到在編輯模式下打開,在視圖模型的構造我有以下行:

MainViewModel mainViewModel = ServiceLocator.Current.GetInstance<MainViewModel>(); 

這顯然檢索MainViewModel,這工作完全正常的當前實例,但我不確定這是做到這一點的最佳方式。

此外,如果我有多個主窗口實例,它們使用相同的MainViewModel實例,並且我從這兩個實例打開了添加/編輯窗口實例,添加/編輯窗口將從MainViewModel的相同實例可能是一個問題。

如果我嘗試爲每個打開的MainWindow創建一個MainViewModel的新實例,那麼我不知道如何將當前使用的MainViewModel的實例傳遞給EditViewModel。

我希望我明確了我需要做的事情。告訴我,如果我錯過了一些東西,我將它添加:)提前

回答

0

感謝,如果我還沒有誤解你的問題不正確,你可以這樣來做: 因爲我需要IsRequired依賴屬性均的MainView和EditView中我創建的延伸Window類

public class ExtendedWindow:Window 
{ 
    public static readonly DependencyProperty IsRequiredProperty = DependencyProperty.Register("IsRequired", typeof(bool), typeof(ExtendedWindow)); 

    public bool IsRequired 
    { 
     get { return (bool)GetValue(IsRequiredProperty); } 
     set { SetValue(IsRequiredProperty, value); } 
    } 
} 

的MainView和視圖模型

一類

EditView中和視圖模型

public partial class EditView:ExtendedWindow 
{ 
    public EditView() 
    { 
     InitializeComponent(); 
     DataContext = new EditViewModel(); 
    } 
} 

public class EditViewModel : INotifyPropertyChanged 
{ 
    private bool isRequired; 
    public bool IsRequired 
    { 
     get { return isRequired; } 
     set { isRequired = value; Notify("IsRequired"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void Notify(string propName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
    } 
} 

這只是一種虛擬,但可以給你的想法,你可以怎麼做。我試了它在假人和它的工作正常。

+0

對不起。我認爲你誤解了我的問題。我需要做的是將DataGrid中的選定對象傳遞給Edit視圖模型,這樣窗口就可以顯示數據並允許從那裏編輯數據。 – Phoenix 2013-02-15 06:19:19