嵌入式UserControl的Grid.Row值的数据绑定不会更新GUI

时间:2018-08-30 09:59:42

标签: c# wpf data-binding

我有一个嵌入另一个视图的UserControl:

<UserControl x:Class="..."
             ...
             ...
             ... 
             xmlns:views="clr-namespace:Omega.GUI.Views"
             mc:Ignorable="d" 
             d:DesignHeight="700" d:DesignWidth="1000">

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
      <RowDefinition Height="*"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition MinWidth="1" Width="1*"></ColumnDefinition>
      <ColumnDefinition Width="{StaticResource GridSplitterWidth}"/>
      <ColumnDefinition Width="1000*"></ColumnDefinition>
    </Grid.ColumnDefinitions>
    ...
    ...
    ...
    <views:SingleWizardView Grid.Row="{Binding SingleWizardViewGridRowController}" Grid.RowSpan="1" Grid.Column="2" Panel.ZIndex="150"  x:Name="SingleWizardViewDisplay" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
  </Grid>

如您所见,我想将Grid.Row值绑定到视图模型中的SingleWizardViewGridRowController变量。但是,这根本不起作用。通常,为了测试我的数据绑定,我在相同的位置上做了一个具有相同数据绑定的虚拟按钮:

<Button Grid.Row="{Binding SingleWizardViewGridRowController}" Grid.Column="2" Panel.ZIndex="150" Content="dummy button" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

...这非常有用(我使用另一个按钮来更改SingleWizardViewGridRowController的值以进行测试)。

我的问题是:当涉及到网格的成员值时,嵌入式视图是否受到某种限制?还是我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

我没有足够的声誉来发表评论,所以我在这里问。 SingleWizardView是否具有自己的DataContext?也就是说,您是在视图的构造函数中还是在代码后面的其他地方为视图设置DataContext?

您可能还希望在调试时检查“输出”或“立即”窗口是否存在任何绑定错误。

编辑:

SingleWizardView中的绑定正在查看SingleWizardView的DataContext,并且由于SingleWizardViewGridRowController不是SingleWizardView的DataContext的属性,因此绑定不起作用。

例如,要使绑定正常工作,您可以尝试以下操作:

<views:SingleWizardView Grid.Row="{Binding DataContext.SingleWizardViewGridRowController, RelativeSource={RelativeSource FindAncestor, AncestorType=local:SingleWizardViewManager}}" />