[英]WPF MVVM Light DataGrid with edit record button and multiple edit windows
我正在學習使用MVVM Light,並且正在編寫一個使用Entity Framework使用數據庫優先模型的程序。
我有一個綁定到ViewModel的DataGrid,該ViewModel從存儲庫獲取數據。我試圖制作一個按鈕,單擊該按鈕會打開一個窗口,該窗口綁定到其自己的View Model,並允許您通過以下方式向DataGrid添加記錄將其添加到具有事件的存儲庫中,該事件在添加項目時會調用,以便可以更新DataGridViewModel。
這里的一切都很好。 我打開表單,輸入數據,按添加,記錄被添加到數據庫中,並且存儲庫事件自動刷新DataGrid。
當我打開多個“添加記錄”窗口時,就會出現問題。 當我在其中一個窗口中鍵入內容時,它會出現在另一個窗口中。
我知道這是因為“添加記錄”窗口的兩個實例都綁定到視圖模型的同一實例而發生的。
有什么方法可以解決此問題,以便每個窗口都可以獨立嗎? 我知道目前這似乎不成問題,但將來我計划使用具有相同視圖模型的同一窗口來編輯記錄(這是一種好方法,您可以推薦我一些方法來進行傳遞嗎?記錄ID還是記錄本身從DataGrid窗口到“添加/編輯記錄”窗口?)。
提前致謝! 告訴我如果我錯過了什么,我將添加它:)
編輯:好的,這就是我想出的:
public EditParentViewModel EditParent
{
get
{
EditParentViewModel editParentViewModelInstance = new EditParentViewModel(ServiceLocator.Current.GetInstance<IParentsRepository>(),
ServiceLocator.Current.GetInstance<IChildrenRepository>(),
ServiceLocator.Current.GetInstance<IBailiffsRepository>());
return editParentViewModelInstance;
}
}
它正在工作,但這是將存儲庫提供給View模型的正確方法嗎?
算上您正在使用ViewModelLocator
,您應該有類似以下內容:
public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<AddRecordViewModel>();
}
public AddRecordViewModel AddRecordViewModel
{
get { return ServiceLocator.Current.GetInstance<AddRecordViewModel>(); }
}
}
每次都返回一個新的視圖模型:
public class ViewModelLocator
{
public ViewModelLocator()
{
}
public AddRecordViewModel AddRecordViewModel
{
get { return new AddRecordViewModel(); }
}
}
這樣,您的表單將始終獲得新的視圖模型,而不是在ServiceLocator
上分配當前實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.