第二个窗口关闭后,属性将恢复为原始值

时间:2013-10-12 03:07:38

标签: c# wpf mvvm

我有一个绑定到我的MainWindow的ViewModel。我在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按钮工作。 : - (

1 个答案:

答案 0 :(得分:1)

我通过将新窗口的datacontext直接设置为我的ViewModel解决了我的问题。为确保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模式不需要此步骤。在MainWindow.xaml.cs文件中为我的MainWindow设置了DataContext,所以我假设可以为第二个windows secondwin.xaml.cs文件完成此操作。我让它工作的唯一方法是设置DataContext,如上面的代码所示....不在.cs文件中。