gpt4 book ai didi

xaml - WinRT 可以用什么代替 AncestorType?

转载 作者:行者123 更新时间:2023-12-03 00:47:57 25 4
gpt4 key购买 nike

我想获取 ListView 项目的数量。但它使用模板,因此,我需要使用 AncestorType,我有一个代码在 WPF 中工作正常,但在 Windows Store 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>

最佳答案

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

<vm:MyViewModel x:Key="ViewModel" />

导致 MyViewModel 将被再次构造。在常见情况下,这是不需要的行为。

顺便说一句,有一个完美的技巧可以绑定(bind)到父级的 DataContext 而无需重建 View 模型。

假设 MyViewModel 有一个名为 TestCommand 的“ICommand”,并且是包含您的 UserControl 的页面的当前 DataContext,请设置 >x:Name 页面,只需使用 ElementName 将页面的 DataContext 绑定(bind)到 UserControlTag 属性 绑定(bind):

<Page...
x:Name="rootPage">

<Grid>
<controls:MyUserControl Tag={Binding DataContext, ElementName='rootPage'} ... />
</Grid>

...
</Page>

然后在 UserControl 的 XAML 中将 x:Name 设置为 UserControl 并将您的属性绑定(bind)到 Tag 中的属性:

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

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

</UserControl>

这可能不是最干净的技巧,它之所以有效,是因为 Tag 属性是 object 类型的依赖属性,您可以将任何内容绑定(bind)到它。

关于xaml - WinRT 可以用什么代替 AncestorType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com