2014-10-02 75 views
0

我想从父视图xaml中为子控件设置视图模型的属性。从父视图中设置子控件视图模型的属性xaml

所以我希望父XAML是这样的:

<UserControl x:Class="MainUserControl" 
...> 
<Grid...> 
    <local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/> 
    <local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/> 
</Grid> 
</UserControl> 

凡ChildVMProperty是在ChildDetailViewModel属性(柜面它是相关的,属性类型需要的ValueOptions枚举)。

请注意,ViewModels是在后面的代码(不是在xaml中)设置的,因为实际上我在ViewModels中使用DI来注入棱镜事件聚合器。

当我尝试做这样的事情时,xaml抱怨,因为它显然对ChildViewModel类一无所知。什么是正确的语法来做到这一点,或者如果它不那么直截了当,我有什么选择来解决这个问题?

回答

0

您需要先创建ChildDetailView.xaml文件。比方说,你把这个文件命名空间中的MyApp.Controls,那么你上面的XAML将类似于

<UserControl x:Class="MainUserControl" 
      xmlns:local="clr-namespace:MyApp.Controls" > 
    <Grid ...> 
     <local:ChildDetailView x:Name="childView1" ChildVMProperty="ValueOptions.Option1"/> 
     <local:ChildDetailView x:Name="childView2" ChildVMProperty="ValueOptions.Option2"/> 
    </Grid> 
</UserControl> 

你必须确保你有你的UserControl还定义DependencyProperty(DP)ChildVMProperty - 但这是另外一个问题关于这个特定主题有很多答案。要为视图添加DP,您可能需要对您尝试定位的特定控件进行子类别分类。

使用DP作为属性的另一种替代方法是使用转换器。

我希望这会有所帮助。

+0

谢谢。如果我将DP添加到子视图,子ViewModel如何知道该值是什么? (这是需要使用该值的子ViewModel) – Jason 2014-10-02 10:52:40

+0

通过绑定到DP。 'ChildVMProperty = {绑定PropertyInTheModel}'。 – MoonKnight 2014-10-02 13:24:45

+0

如果我绑定属性,那么我无法真正设置xaml中的值。我查看了OneWayToSource绑定,但无法确定如何指定值(TargetNullValue不起作用)。 – Jason 2014-10-02 16:32:31

相关问题