子控件中的WPF数据绑定

时间:2012-04-04 11:16:19

标签: wpf data-binding user-controls

我是WPF的新手。我正在尝试构建一个具有函数的应用程序(称之为初始化),用户必须填写大量数据并重复表单的某些部分。虽然我们可能会在一个窗口而不是下一个/上一个页面中使用可折叠面板,但我们正在重写具有相当长的向导的遗留应用程序。还有一些部分重复,例如用户可以指定多个项目,如果他们说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;

任何人都可以建议我采取正确的方法(通过将其划分为多个用户控件)以及我需要在绑定中做些什么才能使其工作?我真的不明白这一点,但特别具有约束力。

1 个答案:

答案 0 :(得分:1)

在我看来,您的ChildOne视图的DataContext仍然是初始化vm。

您可以将视图Datacontext绑定到ChildOneViewModel对象

...
<view:ChildOne DataContext={Binding PropertyReturnsChildOneViewModellObject/>
...

或指定组合框ItemsSource prop的路径。

<ComboBox x:Name="textMessageTypeCmb" ItemsSource="{Binding Path=PropertyReturnsChildOneViewModellObject.TextMessageSelectionOptions, Mode=OneTime}"/>

注意:PropertyReturnsChildOneViewModellObject是Initialisation vm的属性。