属性在第二个窗口关闭后恢复为原始值
本文关键字:恢复 原始 第二个 窗口 属性 | 更新日期: 2023-09-27 18:34:56
我有一个绑定到我的主窗口的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 模式,但无法在没有代码隐藏的情况下让"确定"按钮工作。:-(
我通过将新窗口的数据上下文直接设置为我的 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文件完成。我让它工作的唯一方法是设置数据上下文,如上面的代码所示....不在.cs文件中。