在绑定的datatemplate中绑定单独的数据源

时间:2017-06-15 21:48:04

标签: c# xaml binding uwp

我在flipview中有以下简单的数据模板。

<FlipView x:Name="MyFlipview" ItemsSource="{x:Bind Path=ViewModel.Fleas}" >
       <FlipView.ItemTemplate>
            <DataTemplate  x:DataType="types:FleaType">     
               <TextBox x:Name ="Header" Text= "{Binding Path = ViewModel.GeneralComment}"></TextBox> 
               <TextBox x:Name ="FleaName" Text= "{Binding Path = FleaName}"></TextBox>

            </DataTemplate>
       </FlipView.ItemTemplate>
</FlipView>

但我不知道如何将Header文本框绑定到viewmodel上的generalcomment,因为Generalcomment不是跳蚤收藏的一部分。如果有人知道如何做到这一点,那就非常感激。

由于

1 个答案:

答案 0 :(得分:1)

您正在寻找RelativeSource

<FlipView x:Name="MyFlipview" ItemsSource="{x:Bind Path=ViewModel.Fleas}" >
       <FlipView.ItemTemplate>
            <DataTemplate  x:DataType="types:FleaType">     
               <TextBox x:Name ="Header" Text= "{Binding RelativeSource={RelativeSource AncestorType=UserControl}, Path=DataContext.GeneralComment}"></TextBox> 
               <TextBox x:Name ="FleaName" Text= "{Binding Path = FleaName}"></TextBox>

            </DataTemplate>
       </FlipView.ItemTemplate>
</FlipView>

这里有更多信息:RelativeSource on MSDN,基本上它正在做的是“在我上面找到UserControl元素,并绑定到它将成为视图模型的DataContext,并且那么GeneralComment属性“;很明显,如果您使用UserControl之外的其他内容(例如Page等),则将其替换为该类型。

UWP决定要与众不同的地方。

正如GeorgeT所指出的那样,UWP不支持AncestorType,因此有解决方法,如下所述:How to do relativesource mode find ancestor (or equivalent) in UWP

我可能这样做的方法是只为用户控件设置一个名称,然后执行:

{Binding ElementName=MyUserControl, Path=DataContext.GeneralComment}