UserControl中的UserControl不反映ViewModel中的数据

时间:2013-02-19 10:06:12

标签: c# wpf data-binding user-controls

在MainWindow中,我将其内容设置为UserControl -

<Grid>
    <local:MainControl></local:MainControl>
</Grid>

在MainControl中,我正在使用其他UserControls -

    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.Background>
        <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
            <GradientStop Color="White" Offset="0"></GradientStop>
            <GradientStop Color="LightBlue" Offset="1"></GradientStop>
        </LinearGradientBrush>
    </Grid.Background>
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
    </Grid>
    <Grid Grid.Row="0">
        <ui:TestHeader Height="20" Padding="20" Margin="2" Background="Gray"></ui:TestHeader>
    </Grid>
</Grid>

这里TestHeader是一个简单的UserControl -

<UserControl.DataContext>
    <model:TestViewModel></model:TestViewModel>
</UserControl.DataContext>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Content="{Binding Path=Test}"/>
</Grid>

现在,当我在MainWindow中直接使用TestHeader时,我能够看到从ViewModel传来的数据,但是当我在MainControl中使用相同的TestHeader时,它没有从ViewModel获取数据。我该如何解决这个问题。我想,我错过了什么,但不知道是什么。

请建议解决方案。在此先感谢。

更新

我发现了这个 -

<Grid Grid.Row="1">
        <ui:TestHeader Height="20" Padding="20" Margin="2" Background="Gray"></ui:TestHeader>
    </Grid>
    <ui:TestHeader Grid.Row="0" Background="Gray" Height="20"></ui:TestHeader>

这里,整个内容在MainWindow的Grid中。外部TestHeader填充数据,但Grid中的TestHeader不是。

更新

我得到了我最愚蠢的错误 -

看到填充和高度,两者都是20.没有空间可以存在。

1 个答案:

答案 0 :(得分:0)

您需要在父用户控件上设置DataContext(到ViewModel),然后使用ViewModel的属性将其绑定到控件的属性。

相关问题