没有正确绑定

时间:2013-10-24 20:38:09

标签: c# wpf binding observablecollection

所以,我在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
    }

1 个答案:

答案 0 :(得分:1)

使用:

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

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

删除此段代码,并将DataContext设置为您想要显示的Song实例。

如果您的ListView和您的Grid位于同一页面,我建议您创建一个专用属性(在同一个类中,紧挨着List<Song>属性绑定到你的ListView,例如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"/>

不要忘记这个新属性必须使用INotifyPropertyChangedDependancyProperty,以便在其值发生变化时通知视图(和绑定);)