从父视图xaml设置子控件视图模型的属性

时间:2014-10-02 09:09:01

标签: c# wpf mvvm

我想从父视图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类型的枚举)。

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

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

1 个答案:

答案 0 :(得分: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>

您必须确保DependencyProperty上也定义了ChildVMProperty(DP)UserControl - 但这是另一个问题,并且该特定主题有很多答案。要为视图添加DP,您可能需要对要尝试定位的特定控件进行子类化。

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

我希望这会有所帮助。