所以,我在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
}
答案 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"/>
不要忘记这个新属性必须使用INotifyPropertyChanged或DependancyProperty,以便在其值发生变化时通知视图(和绑定);)