2013-10-12 32 views
1

我有一個ViewModel綁定到我的MainWindow。我在我的ViewModel中有一個屬性,我想綁定到第二個窗口,在選擇菜單項後打開。這是我綁定到第二個窗口的屬性。到目前爲止這麼好一旦第二個窗口關閉,屬性恢復爲原始值

private string _displayPathToLib; 
    public string DisplayPathToLib 
    { 
     get { return _displayPathToLib; } 
     set 
     { 
      _displayPathToLib = value; 
      OnPropertyChanged("DisplayPathToLib"); 
     } 
    } 

我使用一個命令,使用ICommand接口打開第二個窗口。這裏是一個片段

public void Execute(object parameter) 
    { 
     BrowseDialog winBrowseDialog = new BrowseDialog(); 
     Nullable<bool> BrowseDialogResult = winBrowseDialog.ShowDialog(); 

第二個窗口打開,因爲它應該,並允許我編輯顯示的文本框。當我在文本框中輸入內容時(通過設置調試中斷),我能夠看到「DisplayPathToLib」屬性更改。但在關閉窗口後,「DisplayPathToLib」的值將恢復爲NULL。下面是後面我使用的處理代碼片段OK按鈕點擊

private void okButton_Click(object sender, RoutedEventArgs e) 
    { 

     DialogResult = true; 
     Close(); 
    } 

爲什麼房地產一直恢復到NULL?如何讓「DisplayPathToLib」保留其值?我已經嘗試了一切。我也嘗試維護一個MVVM模式,但不能沒有代碼隱藏就OK按鈕工作。 :-(

+0

我想通了,花了將近14個小時的試驗和錯誤。我需要在窗口上設置datacontext winBrowseDialog.datacontext = _data; ........ aaauugh – Allan

+0

請[將您的解決方案添加到答案中,並將其標記爲答案](http://stackoverflow.com/help/自我回答),正如本網站上的慣例。 – Sheridan

回答

1

我解決了我的問題,通過將我的新窗口的datacontext直接設置到我的ViewModel爲了確保您的ViewModel的數據保持來自多個窗口的綁定值,將第二個窗口(或多個窗口)的新實例設置爲您的視圖模型是這樣的...

class UserSettingsCommand : ICommand 
{ 
    MainVM _data;   //MainVm is my ViewModel class 
     public UserSettingsCommand(MainVM data) 
      { 
      _data = data; 
      } 
      . 
      . 
      . 
public void Execute(object parameter) 
    { 

     BrowseDialog winBrowseDialog = new BrowseDialog(); //Instantiate a new custom dialog box 
     winBrowseDialog.DataContext = _data; //THIS IS WHERE I SET MY VIEWMODEL TO THE NEW WINDOWS DATACONTEXT 
     Nullable<bool> BrowseDialogResult = winBrowseDialog.ShowDialog(); 
     . 
     . 
     . 

我新的C#和我剛學MVVM模式等等,而這可能是常識,也許有人能新節省一些時間。使用MVVM模式的一個窗口DataContext在MainWindow.xaml.cs文件中爲我的MainWindow設置,所以我認爲這可以用於第二個窗口secondwin.xaml.cs文件。我得到它的唯一方法是通過setti如上面的代碼中所示,不在.cs文件中的DataContext。

相關問題