WPF:绑定不在ContentControl内部工作

时间:2017-04-24 02:20:46

标签: wpf vb.net xaml

我已经在这几个小时了,我没有得到什么不起作用或它是如何工作的。一些解释将是欣赏所有这些行为。

我正在尝试添加基于其他单元格内容的触发器,如果​​我忘记了绑定部分,它工作正常。

我的问题实际上是Binding本身。如果它在ContentControl中,它根本不起作用。

我的代码:

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <ContentControl>
            <ContentControl.Style>
                <Style TargetType="{x:Type ContentControl}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding CBW_Type}" Value="Text">
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding Path=CBW_Content, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </DataTemplate>
</GridViewColumn.CellTemplate>

我尝试了以下内容,它按预期工作(没有触发器)。数据就好了。

<GridViewColumn.CellTemplate>
    <DataTemplate>
            <TextBlock Text="{Binding Path=CBW_Content, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
    </DataTemplate>
</GridViewColumn.CellTemplate>

我搜索过很多已经使用UpdateSourceTrigger = PropertyChanged解决了这个问题,但它对我没有用。

一旦我在ContentControl中嵌入绑定,任何人都可以告诉我什么不起作用?

此致

2 个答案:

答案 0 :(得分:1)

  

刚刚找到答案。我需要添加,所以ContentControl不是空的我猜。如果有人能说明那个,我会很感激。

DataContext ContentTemplate的{​​{1}}是ContentControl的{​​{1}}。因此,要使绑定到Content属性起作用,您需要将ContentControl的{​​{1}}属性设置或绑定到CBW_Content属性所在的对象的实例定义。

在这种情况下,这是Content的{​​{1}}集合中的相应对象。这就是ContentControl工作的原因。

如果您没有设置或绑定CBW_Content属性,那么就没有什么可以约束的,这就是为什么ItemsSource无法正常工作。<\ n> / p>

希望这是有道理的。

答案 1 :(得分:0)

ContentTemplate是为Content提供不同的模板,没有Content =&gt; ContentTemplate clueless。因此,您也可以将ContentTemplate替换为Content,并在原始代码中删除DataTemplate,如下所示:

          <Setter Property="Content">
              <Setter.Value>
                     <TextBlock Text="{Binding Path=CBW_Content, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
              </Setter.Value>
          </Setter>