【问题标题】:How to Bind Parallax View within GridView DataTemplate?如何在 GridView DataTemplate 中绑定视差视图?
【发布时间】:2019-09-11 02:10:52
【问题描述】:

GridView 滚动时,我正在尝试使用ParallaxViewGridViewItem 视差内制作图像。预期效果与 PC 上 Xbox UWP 应用中的新闻源相同;当您滚动时,listview 项目上的图像会出现视差。如下图所示:

但是,我遇到了数据绑定数据上下文问题。我看到的所有例子都是为了让整个GridViewListView视差的背景。一个工作示例如下(与here 找到的 XAML 控件库示例非常相似):

    <Grid>
        <ParallaxView Name="GridViewParallaxView"
                      Source="{x:Bind MyGridView}"
                      VerticalShift="100">
            <!-- This is the background image that parallaxes. -->
            <Image></Image>
        </ParallaxView>

        <GridView Name="MyGridView">
            <!-- GridView Content Here... -->
        </GridView>
    </Grid>

我遇到的问题是在尝试将DataTemplateParallaxView INSIDE 放在GridViewItemTemplate 中时。

<GridView Name="MyGridView"
          ItemsSource="{x:Bind MyDataList}">
        <GridView.ItemTemplate>
            <DataTemplate x:DataType="models:MyDataType">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                    </Grid.RowDefinitions>

                    <ParallaxView Name="GridViewParallaxView"
                                  Grid.Row="0"
                                  Source="{x:Bind MyGridView}"
                                  VerticalShift="100">
                        <!-- This is the image  ON EACH GRIDVIEW ITEM that parallaxes. -->
                        <Image Source="{x:Bind MySource}"></Image>
                    </ParallaxView>

                    <TextBlock Name="ItemTitleTextBlock"
                               Grid.Row="1"
                               Text="{x:Bind Title}"></TextBlock>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
</GridView>

请注意,为简洁起见,省略了某些属性(如 MinWidthMargin)。

后面的代码(不完全相关,但为某些绑定添加上下文):

public class MyPage : Page
{
    public ObservableCollection<MyDataType> MyDataList { get; set; }
}

public class MyDataType
{
    public string Title { get; set; }
    public ImageSource MySource { get; set; }
}

这不起作用,因为将“ParallaxView”放在“DataTemplate”中会更改“DataContext”。 MyGridView 不能再直接这样绑定了。那怎么绑定呢?

另外,我读到DataContext 属性由 XAML 树中的子级继承。我需要Image 数据绑定与DataTemplate 处于相同的上下文中。有没有办法将DataContext 更改为ParallaxView

【问题讨论】:

    标签: xaml data-binding uwp parallax


    【解决方案1】:

    您可以使用 Binding,而不是 x:Bind。

    <ParallaxView Name="GridViewParallaxView"
                                  Grid.Row="0"
                                  Source="{Binding ElementName=MyGridView}"
                                  VerticalShift="100">
                            <!-- This is the image  ON EACH GRIDVIEW ITEM that parallaxes. -->
                            <Image Source="{x:Bind MySource}"></Image>
    </ParallaxView>
    

    【讨论】:

    • 我实现了这个,它的工作原理和描述的一样!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多