C# 属性在第二个窗口关闭后恢复为原始值

C# 属性在第二个窗口关闭后恢复为原始值,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个绑定到主窗口的ViewModel。我的ViewModel中有一个属性,我想绑定到选择菜单项后打开的第二个窗口。这是我绑定到第二个窗口的属性。到目前为止还不错 private string _displayPathToLib; public string DisplayPathToLib { get { return _displayPathToLib; } set { _displayPathToLi

我有一个绑定到主窗口的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();

为什么属性一直恢复为NULL?如何使“DisplayPathToLib”保持其值???我什么都试过了。我还尝试了维护MVVM模式,但在没有代码隐藏的情况下,无法让OK按钮正常工作:-(

我通过将新窗口的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();
        .
        .
        .
class用户设置命令:ICommand
{
MainVM _data;//MainVM是我的ViewModel类
公共用户设置命令(MainVM数据)
{
_数据=数据;
}
.
.
.
public void Execute(对象参数)
{
BrowseDialog winBrowseDialog=新建BrowseDialog();//实例化一个新的自定义对话框
winBrowseDialog.DataContext=\u data;//在这里我将VIEWMODEL设置为新的WINDOWS DataContext
Nullable BrowseDialogResult=winBrowseDialog.ShowDialog();
.
.
.

我是C#新手,我只是在学习MVVM模式,所以虽然这可能是常识,但也许有新的人可以节省一些时间。将MVVM模式与一个窗口一起使用不需要此步骤。DataContext在MainWindow.xaml.cs文件中为我的MainWindow设置,所以我假设这可以为第二个windows secondwin.xaml.cs f完成ile。我使其工作的唯一方法是按照上面代码中所示设置DataContext…而不是在.cs文件中。

我通过将新窗口的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();
        .
        .
        .
class用户设置命令:ICommand
{
MainVM _data;//MainVM是我的ViewModel类
公共用户设置命令(MainVM数据)
{
_数据=数据;
}
.
.
.
public void Execute(对象参数)
{
BrowseDialog winBrowseDialog=新建BrowseDialog();//实例化一个新的自定义对话框
winBrowseDialog.DataContext=\u data;//在这里我将VIEWMODEL设置为新的WINDOWS DataContext
Nullable BrowseDialogResult=winBrowseDialog.ShowDialog();
.
.
.

我是C#新手,我只是在学习MVVM模式,所以虽然这可能是常识,但也许有新的人可以节省一些时间。将MVVM模式与一个窗口一起使用不需要此步骤。DataContext在MainWindow.xaml.cs文件中为我的MainWindow设置,所以我假设这可以为第二个windows secondwin.xaml.cs f完成ile。我让它工作的唯一方法是按照上面代码中所示设置DataContext…而不是在.cs文件中。

我找到了它,用了近14个小时的反复试验。我需要在winBrowseDialog窗口上设置DataContext。DataContext=_data;…。aaauugh请按照此网站上的惯例。我找到了它,用了al最多连续14个小时的尝试和错误。我需要在winBrowseDialog窗口上设置datacontext。datacontext=\u data;……aaauugh请按照本网站的惯例设置。