XAML DataContext

时间:2011-12-21 16:39:04

标签: silverlight xaml data-binding

这有效

<Border>
    <StackPanel>
        <TextBlock Text="{Binding Foo.Info1}" />
        <TextBlock Text="{Binding Foo.Info2}" />
    </StackPanel>
</Border>

但这不是

<Border DataContext="Foo">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>

我的理解是,如果您为父级设置datacontext,则子级将能够绑定到属性。边境不是父母的好元素吗? 我对XAML中的数据绑定很新。有人能告诉我为什么第二个剪断不起作用并指出我正确的方向?

4 个答案:

答案 0 :(得分:1)

使用

<Border DataContext="{Binding Foo}"> 

没有绑定边框的datacontext只是“Foo”字符串,它没有任何Info1,Info2属性

希望这有帮助

答案 1 :(得分:1)

让我在这里猜测你还需要绑定DataContext,而不是简单地将看起来像XAML的内容应用为文字字符串“Foo”:

<Border DataContext="{Binding Foo}">
  <StackPanel>
    <TextBlock Text="{Binding Info1}" />
    <TextBlock Text="{Binding Info2}" />
  </StackPanel>
</Border>

答案 2 :(得分:1)

你的语法错了,你应该写:

<Border DataContext="{Binding Foo}">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>

答案 3 :(得分:0)

<Border DataContext="{Binding Foo}">
    <StackPanel>
        <TextBlock Text="{Binding Info1}" />
        <TextBlock Text="{Binding Info2}" />
    </StackPanel>
</Border>

上述内容现在意味着Info1Info2将存在于DataContext上,在这种情况下,Foo现已绑定到DataContext

像你一样设置<Border DataContext="Foo">; <Border DataContext="Foo"> <StackPanel> <TextBlock Text="{Binding}" /> <TextBlock Text="{Binding}" /> </StackPanel> </Border> 会导致DataContext属性返回 Foo

TextBlock

如果您尝试上述代码,{{1}}将返回 Foo