【发布时间】:2012-04-04 11:16:18
【问题描述】:
我是 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;
谁能建议我是否采用了正确的方法(通过将其划分为多个用户控件)以及我需要在绑定中执行哪些操作才能使其工作?我真的不明白这些,但特别有约束力。
【问题讨论】:
标签: wpf data-binding user-controls