2011-12-21 101 views
0

这工作XAML的DataContext

<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中的数据绑定非常陌生。有人能告诉我为什么第二次剪断不起作用并指向正确的方向吗?

+0

我找到了@ProfessorChaos,这就是为什么我删除我的评论 – 2011-12-21 16:43:45

+0

@ArsenMkrt谢谢。 upvoted all。系统让我尽快接受答案。 – 2011-12-21 16:45:47

回答

1

使用

<Border DataContext="{Binding Foo}"> 

没有约束力边框的DataContext的只不过是“富”的字符串,它不具有任何信息1,信息2性能

希望这有助于

1

让我隐患一个猜测在这里,你仍然需要绑定到DataContext,而不是简单地将XAML看作是一个字符串“Foo”:

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

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

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

上面现在将意味着Info1Info2将存在于DataContext,在这种情况下,现在势必Foo

像你这样设置DataContext; <Border DataContext="Foo">将导致DataContext属性返回Foo

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

如果你尝试上面的代码都TextBlock的将返回

相关问题