簡體   English   中英

具有編輯記錄按鈕和多個編輯窗口的WPF MVVM Light DataGrid

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM