0

在 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>

现在我可以看到来自 ViewModel 的数据,当我直接在 MainWindow 中使用 TestHeader 时,但是当我在 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 不是。

更新

我犯了有史以来最愚蠢的错误-

看 padding 和 height,都是 20。没有空间容纳。

4

1 回答 1

0

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

于 2013-02-19T10:15:34.443 回答