【发布时间】:2013-08-01 10:10:00
【问题描述】:
我正在使用 MVVM 模式使用 C#。我有两个 WPF 窗口,每个窗口都有一个视图模型。基本上我需要将主视图模型的属性传递给“子”视图模型。目前,我通过在主视图模型的构造函数中设置一个与新视图模型相等的私有变量来做到这一点,并在子视图模型的构造函数中传递属性。
但是,有一个依赖属性链接到该属性,因为它用作组合框中所选项目的绑定。因此,在子视图模型初始化后很可能会发生变化,但是通过在构造函数中传递属性,我的子视图模型不会发生变化。
那么,无论如何,我是否可以将属性传递给构造函数,并在子视图模型中更改它在主视图模型中?还是我必须在子视图模型中创建一个属性,每次设置主视图模型中的属性时都会更新该属性?
希望这是有道理的。
编辑在我的主视图模型中,我声明以下内容:
public readonly DependencyProperty CurrentDatabaseManagedProperty = DependencyProperty.Register("CurrentDatabaseManaged", typeof(DatabaseInfo), typeof(MainViewModel));
public DatabaseInfo CurrentDatabaseManaged {
get { return (DatabaseInfo)GetValue(CurrentDatabaseManagedProperty); }
set { SetValue(CurrentDatabaseManagedProperty, value); }
}
public DatabaseInfo CurrentDatabaseManagedSelection {
get { return CurrentDatabaseManaged; }
set {
if (CurrentDatabaseManaged != null &&
(String.Equals(value.Name, CurrentDatabaseManaged.Name, StringComparison.OrdinalIgnoreCase))) return;
CurrentDatabaseManaged = (value.IsUsable ? value : dbm.ReadDatabase(value.FileName));
}
}
其中CurrentDatabaseManagedSelection 是组合框的SelectedItem。在主视图模型的构造函数中,我有以下内容:
_DatabaseVM = new ChildViewModel(CurrentDatabaseManaged);
而ChildViewModel的构造函数是这样的:
public ChildViewModel( DatabaseInfo SelectedDatabase)
{
if (SelectedDatabase != null)
_SelectedDatabase = SelectedDatabase;
}
}
基本上我希望_SelectedDatabase 在CurrentDatabaseManagedSelection 出现时更新。
【问题讨论】:
-
请让您的问题更简单。
-
@SeyedMortezaMousavi 请建议我该怎么做?我已经包含了我认为需要的所有信息。最后一段可能是一个独立的结论
-
@Andy 代码示例将有助于澄清您的问题。您的构造函数、绑定和其他相关部分是什么样的?
-
@TimS。好的,我将稍微编辑一下我的代码,以便我可以将其发布在这里。请和我一起裸露
-
我同意@SeyedMortezaMousavi 的观点。在您的第一段中,您是说,您在父视图模型中创建子视图模型并将对象传递给子视图模型的构造函数,对吗?在你的第二段中,这个依赖属性在哪里?在父视图或子视图中?您希望当属性从 dp 更改时,它也会影响子视图模型内的属性?我认为一些代码会使它更清晰。
标签: c# wpf mvvm properties constructor