未正确绑定
本文关键字:绑定 | 更新日期: 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
位于同一个页面中,我建议你创建一个专用属性(在同一类中,就在绑定到你的ListView
的List<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,以便它可以在其值更改时通知视图(和绑定;)