使用Window的RelativeSource进行WPF绑定需要Path中的“DataContext”吗?

时间:2010-03-22 15:19:11

标签: wpf data-binding

下面的代码有效,但我很好奇为什么我需要Path以“DataContext”为前缀?在大多数其他情况下,使用的路径是相对于DataContext的。是因为我使用的是RelativeSource吗?因为源位于根级别(Window)?

    <Style TargetType="TextBox">
        <Setter 
           Property="IsReadOnly"
           Value="{Binding RelativeSource={RelativeSource FindAncestor, 
           AncestorType={x:Type Window}}, Path=DataContext.IsReadOnly}"/>
    </Style>        

1 个答案:

答案 0 :(得分:13)

您绑定到包含Window的DataContext,而不是Window本身。你要放:

Value="{Binding RelativeSource={RelativeSource FindAncestor, 
       AncestorType={x:Type Window}}, Path=IsReadOnly}"

这将绑定到Window的IsReadOnly属性,而不是其数据上下文类。从Window doesn't contain an IsReadOnly property开始,这显然是来自不同的类(很可能是你的ViewModel,如果你使用MVVM等)。