【问题标题】:Why do I have to set the content in ContentControl?为什么我必须在 ContentControl 中设置内容?
【发布时间】:2015-01-06 11:20:38
【问题描述】:

我有一个比较简单的问题,我不明白。假设我指定了一个 ContentControl 和一个 ContentTemplate,我想做以下事情:

<ContentControl ContentTemplate="{StaticResource UserView}" DataContext="{Binding User}" />

但令我惊讶的是,这完全失败了,而以下行完美运行:

<ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding User}" />

经过仔细检查,第一行给出了一个令人惊讶的null 作为其 DataContext,而后一行具有正确的 DataContext。

谁能给我解释一下这是怎么回事?

感谢一切!

【问题讨论】:

    标签: wpf binding datacontext contentcontrol


    【解决方案1】:

    我想你绑定到属性User 是一些ViewModel。比你不必设置DataContext:

    <ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding}" DataContext="{Binding User}" />
    

    更常见的是这样写:

    <ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding User}"/>
    

    【讨论】:

      【解决方案2】:

      我认为在第一个示例中内容属性为空,所以你应该这样做

      <ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding}" DataContext="{Binding User}" />
      

      【讨论】:

      • 在我看来,如果我这样做&lt;ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding}" DataContext="{Binding User}" /&gt; 是不是有点多余?因为有了第二行,DataContext 将神奇地正确设置。
      • 那么您遇到的主要问题是将 null 设置为 Content.. 而当您放置 &lt;ContentControl ContentTemplate="{StaticResource UserView}" Content="{Binding}" DataContext="{Binding User}" /&gt; 时,您可以使用“具有其他属性的用户对象
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 2019-08-28
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多