2017-05-15 13 views
0

我有兩種形式: Form1Form2。 在Form1 .ctor, I am setting the DataContext`如下: -如何在ViewModel從其創建的表單之外的表單更新時將更改應用於WPF表單的GUI?

public ViewModel1 VM1; 
Public Form1() 
{ 
    InitializeComponent(); 
    VM1=Populate_View_Model();//This method populates the ViewModel 
    this.DataContext = VM1; 
} 

我有這樣的形式對藉此視圖模型到另一個WPF形式的事件

private void cmdButtonTemplate_Click(object sender, RoutedEventArgs e) 
{ 
    ViewModel1 VM1_Clone = GetCloneObject(VM1_Clone); //Create a clone of ViewModel.Needed on Form2 
    new Form2(this, VM1,VM1_Clone); 
} 

窗體2正在Form1的電流(此)實例和當前視圖模型和視圖模型下的克隆: -

ViewModel1 VM, VM_Clone; 
Form1 Objfrm1; 
public Form2(Form1 ObjectForm1, ViewModel1 OvjVM1, ViewModel1 ObjVM1_Clone) 
{ 
    Frm1 = ObjectForm1; 
    VM = OvjVM1; 
    VM_Clone = ObjVM1_Clone; 
    Objfrm1 = ObjectForm1; 
    this.DataContext = VM_Clone; 
} 

現在,窗體2者更改VM1_Clone。 一旦我做了這些改動VM_CLONE,我在Form2的事件我在哪裏設置VM_CLONE到VM1爲下: -

Form1 Frm1; 
    private void cmdSave_MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     VM = VM_Clone; 
    } 

現在我想刷新GUI Form1上與更新的視圖模型從窗體2 ,即VM.但Form1上的GUI不會使用更新的View Model的新值更新。

我甚至試圖與Form1的窗體2從在DataContext爲下設置Form1的對象實例(在窗體2的構造器): -

private void cmdSave_MouseUp(object sender, MouseButtonEventArgs e) 
    { 
     //VM1 = VM1_Clone; 
     Objfrm1.DataContext = VM1; 
    } 

這也沒有取得任何results.Plz告訴如何在將VieModel從創建它的表單以外的表單更改爲應用對錶單的ViewModel所做的更改時。

+0

您應該提供更多的通用信息,關於您想要歸檔的信息。我看起來有點像你想編輯=>保存/取消邏輯。爲此,可能有更好的方法。 –

+0

我有一個在Form1上創建的ViewModel,它需要從Form2更新。ViewModel在Form2中得到更新,但在Form2中對ViewModel所做的更改沒有反映在Form1的GUI中。不止一種方式事情總是如此,但我想回答在這種情況下應該如何完成? –

回答

0

對我來說,它看起來很髒代碼,我不能提供一個更優雅的解決方案,沒有更多的信息。你應該看看Mvvm模式。

我有Form1上創建一個視圖模型,它需要從Form2.The視圖模型更新窗體2時得到更新,但在窗體2到視圖模型所做的更改不會在Form1.There的GUI反映較多而不是一種總是做事的方式,但是我想回答在這種情況下應該如何做?

將form1的datacontext設置爲vm_clone。因此,而不是VM=VM_Clone,或Objfrm1.DataContext=VM1

private void cmdSave_MouseUp(object sender, MouseButtonEventArgs e) 
{ 
    Objfrm1.DataContext=VM_Clone; 
} 

或者,如果沒有必要的只是不克隆您的視圖模型,而是給出相同的視圖模型實例到你的窗體2作爲DataContext的。

+0

第二個表單上有一個取消按鈕,用戶可以返回到form1而不會影響form2的更改,如果按照您的說法進行操作,那麼這些更改會反映在兩個表單上,並且在發生變化時在form2上,我不想要,因爲form2上也有取消按鈕。 –

+0

然後在保存方法中重寫datacontext。然後在取消方法中,您可以不做任何事情就關閉form2。但請記住,您的原始視圖模型仍然保持不變!所以如果你想從一些實例變量中使用這個視圖模型,你也必須切換它們,或者將form1的datacontext拖到那些變量中。 –

相關問題