【问题标题】:Databinding MediaPlaybackItem to ListView Item in DataTemplate将 MediaPlaybackItem 数据绑定到 DataTemplate 中的 ListView 项
【发布时间】:2017-09-18 10:08:47
【问题描述】:

您好,我有以下列表视图:

<ListView x:Name="SongList" HorizontalAlignment="Left" Visibility="Visible" Height="615" Background="White"
          Opacity="0.5" SelectedValue="selectedFile"
          ItemsSource="{Binding MediaModels.MediaPlaybackItemsList  , UpdateSourceTrigger=PropertyChanged}"
          Margin="986,105,0,0" VerticalAlignment="Top" Width="294">

所以在我的 itemSource 中,我绑定了一个 MediaPlaybackItem 列表。一切正常,只是我不知道如何将每个媒体播放项目的艺术家和标题绑定到 dataTemplate:

<DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Border BorderBrush="#404040" BorderThickness="0,0,0,2" HorizontalAlignment="Stretch"
                                Width="282" Height="80">
                            <Grid HorizontalAlignment="Left">
                                <TextBlock Text="{Binding GetDisplayProperties().MusicProperties.Artist}" TextWrapping="WrapWholeWords"
                                           Margin="82,10,10,0" />
                                <Grid Margin="0,0,-140,0">
                                    <Image Source="Images/Album.png" Width="70" Height="70" Margin="0,0,350,0" />
                                </Grid>
                            </Grid>
                        </Border>
                    </StackPanel>
                </DataTemplate>

MediaPlaybacKItem 类有方法GetDisplayProperties().MusicProperties.Artist/Title/etc。返回string。我只能通过这个GetDisplayProperties 方法访问这些properties,那么如何在数据模板中绑定它的结果呢?

【问题讨论】:

    标签: mvvm data-binding binding uwp


    【解决方案1】:

    您不能将方法绑定到这样的属性。相反,在您的 MediaPlaybackItem 中公开一个返回 MusicProperties 对象的属性。

    MediaPlaybackItem 类

    public MusicPropertiesType MusicProperties
    {
      get 
      {
        return this.GetDisplayProperties().MusicProperties;
      }
    }
    

    现在您可以将其绑定到您的 ItemTemplate

    XAML

    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <Border BorderBrush="#404040" BorderThickness="0,0,0,2" HorizontalAlignment="Stretch"
                    Width="282" Height="80">
                <Grid HorizontalAlignment="Left">
                    <TextBlock Text="{Binding MusicProperties.Artist}" TextWrapping="WrapWholeWords"
                               Margin="82,10,10,0" />
                    <Grid Margin="0,0,-140,0">
                        <Image Source="Images/Album.png" Width="70" Height="70" Margin="0,0,350,0" />
                    </Grid>
                </Grid>
            </Border>
        </StackPanel>
    </DataTemplate>
    

    【讨论】:

    • MediaPlaybackItem 是 UWP 库(不是我自己的类)并且 c# 不支持属性扩展,所以我无法使用您的解决方案
    • 您可能想在您的应用程序中添加一个ViewModel 层。这就是你应该绑定 View 的地方。
    猜你喜欢
    • 2016-09-07
    • 2016-11-30
    • 2017-02-26
    • 1970-01-01
    • 2019-04-13
    • 2011-08-16
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多