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