未正确绑定

本文关键字:绑定 | 更新日期: 2023-09-27 18:36:56

所以,我在 WPF 中有以下绑定。

    <GroupBox Header="Nuværende Sang" HorizontalAlignment="Left" Margin="20,23,0,0" VerticalAlignment="Top" Height="165" Width="288">
        <Grid HorizontalAlignment="Left" Height="143" VerticalAlignment="Top" Width="276">
            <Grid.DataContext>
                <ETC:Song/>
            </Grid.DataContext>
            <Image HorizontalAlignment="Left" Height="124" Margin="10,10,0,0" VerticalAlignment="Top" Width="134" Stretch="Fill"/>
            <TextBlock HorizontalAlignment="Left" Margin="144,100,0,0" TextWrapping="Wrap" Text="{Binding Time}" VerticalAlignment="Top" Height="25" Width="122"/>
            <TextBlock HorizontalAlignment="Left" Margin="144,40,0,0" TextWrapping="Wrap" Text="{Binding Artist}" VerticalAlignment="Top" Height="25" Width="122"/>
            <TextBlock HorizontalAlignment="Left" Margin="144,70,0,0" TextWrapping="Wrap" Text="{Binding Album}" VerticalAlignment="Top" Height="25" Width="122"/>
            <TextBlock HorizontalAlignment="Left" Margin="144,10,0,0" TextWrapping="Wrap" Text="{Binding Title}" VerticalAlignment="Top" Height="25" Width="122"/>
        </Grid>
    </GroupBox>

这些值总是返回null,我知道字符串和int不是null,因为它们已经在这个ListView中使用了:

        <ListView x:Name="ListViewSange" HorizontalAlignment="Left" Height="436" VerticalAlignment="Top" Width="984" Background="{x:Null}" ItemsSource="{Binding Songs}" FontFamily="Malgun Gothic" FontSize="24" Margin="0,0,0,-12">
            <ListView.View>
                <GridView AllowsColumnReorder="True">
                    <GridViewColumn Header="No." DisplayMemberBinding="{Binding ActiveIndex}" Width="50"/>
                    <GridViewColumn Header="Song name" DisplayMemberBinding="{Binding Title}" Width="700"/>
                    <GridViewColumn Header="Artist" DisplayMemberBinding="{Binding Artist}" Width="234"/>
                </GridView>
            </ListView.View>
        </ListView>

我错过了什么?

它们都指的是这个类:

public class Song
{
    public string Title { get ; set; }
    public string Path { get; set; }
    public string Artist { get; set; }
    public int Time { get; set; }
    public string Album { get; set; }
    //public ImageBrush Portrait { get; set; }

    public Song(string title, string path, string artist, int time, string album)//, ImageBrush portrait)
    {
        this.Path = path;
        this.Title = title;
        this.Artist = artist;
        this.Time = time;
        this.Album = album;
        //this.Portrait = portrait;
    }
    public Song()
    {
        // TODO: Complete member initialization
    }

未正确绑定

通过使用 :

<Grid.DataContext>
    <ETC:Song/>
 </Grid.DataContext>

您正在为网格DataContext分配一个空的Song实例。由于DataContext是从父实例继承的,因此您的TextBlock可能绑定到来自空 Song 实例的空值。

删除这段代码,并使用您真正想要显示的Song实例设置DataContext

如果你的ListView和你的Grid位于同一个页面中,我建议你创建一个专用属性(在同一类中,就在绑定到你的ListViewList<Song>属性旁边,例如称为SongCurrentlyPlaying)并以这种方式绑定你的TextBlock

   <TextBlock HorizontalAlignment="Left" Margin="144,100,0,0" TextWrapping="Wrap" Text="{Binding SongCurrentlyPlaying.Time}" VerticalAlignment="Top" Height="25" Width="122"/>
   <TextBlock HorizontalAlignment="Left" Margin="144,40,0,0" TextWrapping="Wrap" Text="{Binding SongCurrentlyPlaying.Artist}" VerticalAlignment="Top" Height="25" Width="122"/>
   <TextBlock HorizontalAlignment="Left" Margin="144,70,0,0" TextWrapping="Wrap" Text="{Binding SongCurrentlyPlaying.Album}" VerticalAlignment="Top" Height="25" Width="122"/>
   <TextBlock HorizontalAlignment="Left" Margin="144,10,0,0" TextWrapping="Wrap" Text="{Binding SongCurrentlyPlaying.Title}" VerticalAlignment="Top" Height="25" Width="122"/>

不要忘记这个新属性必须使用 INotifyPropertyChanged 或作为 DependancyProperty,以便它可以在其值更改时通知视图(和绑定;)