Xaml WinRT什么可以代替AncestorType?

Xaml WinRT什么可以代替AncestorType?,xaml,winrt-xaml,Xaml,Winrt Xaml,我想获取ListView项目的计数。 但是它使用了一个模板,因此,我需要使用AncestorType,我有一个代码,在WPF中可以很好地工作,但在Windows应用商店Apps 8中不能,因为那里没有AncestorType,所以我可以做什么来代替呢?如何使此代码在winRT中工作 这是我的密码: <ListView ItemsSource="{Binding Users}"> <ListView.Style> <Style TargetTy

我想获取ListView项目的计数。 但是它使用了一个模板,因此,我需要使用AncestorType,我有一个代码,在WPF中可以很好地工作,但在Windows应用商店Apps 8中不能,因为那里没有AncestorType,所以我可以做什么来代替呢?如何使此代码在winRT中工作

这是我的密码:

<ListView ItemsSource="{Binding Users}">
    <ListView.Style>
        <Style TargetType="ListView">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Border BorderThickness="1" BorderBrush="LightGray">
                            <StackPanel>
                                <ScrollViewer>
                                    <ItemsPresenter />
                                </ScrollViewer>
                                <TextBlock Margin="0,4" FontWeight="Bold">
                                    <Run Text="Count: "/>
                                    <Run Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Path=Items.Count, Mode=OneWay}"/>
                                </TextBlock>
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>                    
        </Style.Setters>
    </Style>
    </ListView.Style>
    <ListView.ItemTemplate>
        <DataTemplate>
            <ListViewItem IsHitTestVisible="False">
                <StackPanel>
                    <facebookControls:ProfilePicture Height="74" Width="74" ProfileId="{Binding FacebookId}" />
                    <TextBlock Text="{Binding UserName}" FontSize="18" HorizontalAlignment="Center" />
                </StackPanel>
            </ListViewItem>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

由于您使用的是
控制模板
,因此需要一些方法来突破并解决底层的
数据上下文
。这取决于您如何定义要绑定到的对象。例如,如果在参考资料中定义了一个
ViewModel
,则可以使用与
Users
属性相同的方法访问它:


...
...
...

这是解决这个问题的一种方法。

Ed Chapel发布的答案有一个很大的缺点:

<vm:MyViewModel x:Key="ViewModel" />
然后在
UserControl
的XAML中,将
x:Name
设置为
UserControl
,并将属性绑定到
标记中的属性:

<UserControl ...
    x:Name="rootControl">

    <Grid>
        <Button Command={Binding Tag.TestCommand, ElementName='rootControl'} ... />
    </Grid>

</UserControl>


这可能不是最干净的把戏,这是因为
Tag
属性是类型为
object
的依赖属性,您可以将任何内容绑定到它。

最简单的解决方案是命名在上下文中包含视图模型的任何根容器,只需通过提及元素名称在ContentControl中设置控件/容器的DataContext,你会得到同样的背景

例如,(我已将页面的根网格命名为“rootGrid”,并通过DataContext=“{Binding ElementName=rootGrid,Path=DataContext}”设置上下文)


我是在UWP中得到的

<GridView x:Name="abc" ItemsSource="{Binding Path=DataContext.Companies,RelativeSource={RelativeSource Mode=TemplatedParent}}"></GridView>


我在一个ControlTemplate中,这就是我想要AncestorType的原因,你能告诉我可以做什么吗?谢谢,只需要更改到Users.Count的路径(不需要源代码)…我在上分享了UWP中相对源AncestorType的解决方案
<ContentControl Name="contentControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                        >
        <Grid Height="600" 
              Width="600"
                 DataContext="{Binding ElementName=rootGrid, Path=DataContext}"
              > 

            <Image Height="500" Width="500" 

                   Source="{Binding photoUrl}" VerticalAlignment="Center" HorizontalAlignment="Stretch"/>
        </Grid>
    </ContentControl>
<GridView x:Name="abc" ItemsSource="{Binding Path=DataContext.Companies,RelativeSource={RelativeSource Mode=TemplatedParent}}"></GridView>