WPF(XAML - 数据绑定 - 查找祖先)

时间:2016-04-07 03:35:16

标签: c# wpf xaml binding telerik

我遇到了一个问题,我似乎无法从我的ViewModel中绑定一个值。代码是这样的......

<telerik:RadGridView 
       ...
       DataContext = "{Binding thisViewModel}"
       ItemSource = "{Binding item1}"
       ... >

   <telerik:RadGridView.Columns>
      <telerik:GridViewDataColumn
             ....
             DataMemberBinding = "{Binding insideItem1}">

         <telerik:GridViewDataColumn.Header>

             <Run Text = "{Binding Path = DataContext.item2,
                               RelativeSource = {RelativeSource Mode=FindAncestor, 
                                   AncestorType="{x:Type telerik:RadGridView"}, 
                                   AncestorLevel = 1}}"/>

              .....

      </<telerik:GridViewDataColumn>

具有绑定问题的是&#34;运行文字&#34; 部分中的 item2 item2 thisViewModel 中的另一个属性,就像 item1 一样。任何人都可以在这件事上启发我吗?提前谢谢你:)

2 个答案:

答案 0 :(得分:0)

我建议您将ViewModel定义为StaticResource,然后以这种方式绑定它:

<Run Text = "{Binding Path=DataContext.item2 Source={StaticResource MyDataContext}}"/>

希望它有所帮助!祝你有美好的一天!

答案 1 :(得分:0)

你有一个缺少逗号和一些不必要的(并且有点混乱)的引号。另外,Run元素不能像我理解的那样单独使用,但应该包含在TextBlock或FlowDocument中的Paragraph之类的内容中。您的代码的更正版本是

<TextBlock>
    <Run Text="{Binding Path=DataContext.item2,
                    Mode=OneWay,
                    RelativeSource={RelativeSource Mode=FindAncestor,
                        AncestorType={x:Type telerik:RadGridView},
                        AncestorLevel=1}}"/>
</TextBlock>

如果您不需要专门针对“运行”功能,则可以单独使用TextBlock

<TextBlock Text="{Binding Path=DataContext.item2,
                 RelativeSource={RelativeSource Mode=FindAncestor,
                    AncestorType={x:Type telerik:RadGridView},
                    AncestorLevel=1}}"/>

如果适用于您的布局,则稍微简单的替代方法是

<TextBlock Text="{Binding Path=DataContext.item2,
            RelativeSource={RelativeSource AncestorType={x:Type telerik:RadGridView}}}"/>