c# - 一旦第二个窗口关闭,属性就会恢复为原始值

标签 c# wpf mvvm

我有一个绑定(bind)到我的 MainWindow 的 ViewModel。我的 ViewModel 中有一个属性,我想绑定(bind)到选择菜单项后打开的第二个窗口。这是我绑定(bind)到第二个窗口的属性。到现在为止还挺好

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

我使用使用 ICommand 接口(interface)的命令打开第二个窗口。这是一个片段
public void Execute(object parameter)
    {
       BrowseDialog winBrowseDialog = new BrowseDialog();
        Nullable<bool> BrowseDialogResult = winBrowseDialog.ShowDialog();

第二个窗口按原样打开,允许我编辑显示的文本框。当我在文本框中输入内容(通过设置调试中断)时,我能够看到“DisplayPathToLib”属性的变化。但在关闭窗口时,“DisplayPathToLib”的值恢复为 NULL。下面是我用来处理确定按钮单击的代码片段
private void okButton_Click(object sender, RoutedEventArgs e)
    {

        DialogResult = true;
        Close();
    }

为什么该属性会不断恢复为 NULL?如何让“DisplayPathToLib”保留其值(value)???我已经尝试了一切。我还尝试维护 MVVM 模式,但如果没有代码隐藏,就无法让 OK 按钮工作。 :-(

最佳答案

我通过将新窗口的数据上下文直接设置为 ViewModel 解决了我的问题。为了确保您的 ViewModel 的数据保持来自多个窗口的绑定(bind)值,请将您的第二个窗口(或多个窗口)的新实例设置为您的 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 设置,所以我认为这可以为第二个 windows secondwin.xaml.cs 文件完成。我让它工作的唯一方法是设置 DataContext 如上面的代码所示......而不是在 .cs 文件中。

关于c# - 一旦第二个窗口关闭,属性就会恢复为原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19330063/

相关文章:

wpf - Windows Phone 7/Silverlight/WPF MVVM 开发

wpf - 在 MVVM 中的查看模式和编辑模式之间切换?

c# - $ - 字符串插值实时编译 - 从文件

c# - 导航期间多次调用 ValueConverter

c# - 如何继承样式并覆盖某些内容?

c# - 如何从绑定(bind)到 C# MVVM 中的 ObservableCollection 的列表中删除对象

C# 初始化语法

c# - C# 中哈希表实现的示例是什么?

c# - : use correct height 中的动画控件

.net - 如何开始WPF开发?