使用本地datacontext覆盖父控件的datacontext

时间:2014-03-05 11:27:04

标签: wpf xaml data-binding datacontext

我有一个Groupbox,其中有多个Textbox。所有这些Textbox都从Groupbox的Datacontext派生,但是组中的一个Textbox需要不同的Datacontext。

<GroupBox Header="My Group" Height="150" Width="1132" DataContext="{Binding ContextA}" >
                                <Grid>
                                    <Label x:Name="lblA"  Content="Policy Number:" Margin="6,12,970,92" />
                                    <TextBox x:Name="txtbA" Margin="155,12,0,0" HorizontalAlignment="Left" Height="24" TextWrapping="Wrap"  Text="{Binding ValueA}" VerticalAlignment="Top" Width="278" Grid.ColumnSpan="2"/>
                                    <Label x:Name="lblB"  Content="Policy Type:" Margin="612,10,334,88" Height="30"/>
                                    <TextBox x:Name="txtbB" Margin="801,12,0,0" HorizontalAlignment="Left" Height="24" TextWrapping="Wrap" DataContext="{Binding ContextB}" Text="{Binding ValueB}" VerticalAlignment="Top" Width="278"/>
                                </Grid>
                            </GroupBox>

在上面的代码中txtbA使用与Groupbox相同的Datacontext。 我希望txtbB有一个单独的Datacontext,即。 ContextB

ContextB未分配给txtbB。如何解决问题?

注意: ContextAContextB =实体框架模型列表。

1 个答案:

答案 0 :(得分:1)

WPF绑定引擎在当前DataContext中查找属性。因此,在您的情况下,绑定引擎在类ContextB中查找属性ContextA,因为textBox是从父级继承DataContext分组框中。

您可以做的是对ContextA使用更详细的定义,如下所示:

<GroupBox Header="My Group" Height="150" Width="1132"
          DataContext="{Binding}"> <-- HERE Or can remove setting DC altogether.
   <Grid>
     <Label x:Name="lblA"  Content="Policy Number:" Margin="6,12,970,92" />
     <TextBox x:Name="txtbA" Margin="155,12,0,0" HorizontalAlignment="Left"
              Height="24" TextWrapping="Wrap"
              Text="{Binding ContextA.ValueA}" <-- HERE
              VerticalAlignment="Top"
              Width="278" Grid.ColumnSpan="2"/>
     <Label x:Name="lblB"  Content="Policy Type:" Margin="612,10,334,88"
            Height="30"/>
     <TextBox x:Name="txtbB" Margin="801,12,0,0" HorizontalAlignment="Left"
              Height="24" 
              TextWrapping="Wrap" DataContext="{Binding ContextB}"
              Text="{Binding ValueB}" VerticalAlignment="Top" Width="278"/>
   </Grid>
</GroupBox>