我是 WPF 的新手。我正在尝试构建一个具有功能(称为初始化)的应用程序,用户必须在其中填写大量数据并且重复表单的某些部分。我们正在重写一个有相当长的向导的遗留应用程序,尽管我们可能会在一个窗口中使用可折叠面板而不是下一页/上一页。还有一些部分是重复的,例如用户可以指定一些项目,如果他们说 3 他们将需要为每个部分填写一些配置信息,因此这些控件需要重复 3 次。
我正在使用 MVVM 并在此处使用此示例:http: //msdn.microsoft.com/en-us/magazine/dd419663.aspx
旧向导大约有 4 页,因此我打算拥有一个包含 4 个子用户控件的用户控件(初始化)来稍微分解 xaml。
到目前为止,我已经进行了初始化(其 ViewModel 继承自 Workspace ViewModel,如上例所示)并且它包含一个正在工作的孩子:
<Expander ExpandDirection="Down" Header="ChildOne">
<view:ChildOne />
</Expander>
我将为每个孩子和初始化有单独的 ViewModel,这给我带来了我的问题。我遇到的问题是 ChildOne 包含一个我试图绑定的下拉列表,如下所示:
<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=TextMessageSelectionOptions, Mode=OneTime}"/>
TextMessageSelectionOptions 是 ChildOne 的 ViewModel 中的公共属性。这不会导致任何错误,但会出现一个空的下拉列表 - 永远不会调用该属性 getter。如果我将该属性 getter 代码移到 Initialisation 的 ViewModel 中,它会起作用,但我试图将我的代码保持在可管理的块中,所以我想将帽子代码放回 ChildOne 的 ViewModel 中。如果在我的 MainWindow 中我将 ChildOne 创建为工作区而不是像这样的初始化,它也可以工作
ChildOneViewModel ws = this.Workspaces.FirstOrDefault(vm => vm is ChildOneViewModel) as ChildOneViewModel;
谁能建议我是否采取了正确的方法(通过将其分成几个用户控件)以及我需要在绑定中做什么才能使这项工作?我真的不明白这些,但特别具有约束力。