UWP 绑定不显示空值
UWP Binding not showing empty value
我有一个 ListView
包含 Music
列表(我的 ViewModel),Music
有一个 string
属性 Album
.
然而,当 Album
为空时,意味着它只是 ""
,容纳 Album
的容器(HyperTextButton
)不显示空值.相反,它显示 Music.ToString()
的值。而且虽然显示的是Music
字符串,但是HyperTextButton
的内容确实是空的,这可以在HyperTextButton
.
的点击事件中得到证实
如何让它正确显示空字符串?
这是ListView
的ItemTemplate
:
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=PlaylistController, Path=ShowAlbumText}">
<local:PlaylistControlItem.ContextFlyout>
<MenuFlyout Opening="OpenMusicMenuFlyout" />
</local:PlaylistControlItem.ContextFlyout>
</local:PlaylistControlItem>
这是显示 Album
:
的 Control
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
Content="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
ListView
的源码是here.
ItemTemplate
是 here.
通过检查你的代码,主要问题在TextButtonStyle。在 TextButtonStyle 中,您还可以使用 textBlock 来实现绑定。它的DataContext是Music,所以它有时会调用Music.toString方法,而在你重写了returnsPath的toString方法中,就会出现这种情况。
最快的解决办法是将AlbumTextButton的DataContext设置为Music.Album(这里改变的只是AlbumTextButton的DataContext,而不是Page的context。),这样textBlock就会绑定到相册。在这种情况下,您不需要将 Album 绑定到 Button 的内容。或者您可以修改样式中的内容。
TextButton.xaml:
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
DataContext="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
更新:
方法二
如果要去除下划线,可以尝试使用系统提供的TextBlockButtonStyle。这种用法也不会显示下划线。
.xaml:
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
Content="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextBlockButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
我有一个 ListView
包含 Music
列表(我的 ViewModel),Music
有一个 string
属性 Album
.
然而,当 Album
为空时,意味着它只是 ""
,容纳 Album
的容器(HyperTextButton
)不显示空值.相反,它显示 Music.ToString()
的值。而且虽然显示的是Music
字符串,但是HyperTextButton
的内容确实是空的,这可以在HyperTextButton
.
如何让它正确显示空字符串?
这是ListView
的ItemTemplate
:
<local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=PlaylistController, Path=ShowAlbumText}">
<local:PlaylistControlItem.ContextFlyout>
<MenuFlyout Opening="OpenMusicMenuFlyout" />
</local:PlaylistControlItem.ContextFlyout>
</local:PlaylistControlItem>
这是显示 Album
:
Control
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
Content="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
ListView
的源码是here.
ItemTemplate
是 here.
通过检查你的代码,主要问题在TextButtonStyle。在 TextButtonStyle 中,您还可以使用 textBlock 来实现绑定。它的DataContext是Music,所以它有时会调用Music.toString方法,而在你重写了returnsPath的toString方法中,就会出现这种情况。
最快的解决办法是将AlbumTextButton的DataContext设置为Music.Album(这里改变的只是AlbumTextButton的DataContext,而不是Page的context。),这样textBlock就会绑定到相册。在这种情况下,您不需要将 Album 绑定到 Button 的内容。或者您可以修改样式中的内容。
TextButton.xaml:
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
DataContext="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
更新: 方法二
如果要去除下划线,可以尝试使用系统提供的TextBlockButtonStyle。这种用法也不会显示下划线。
.xaml:
<HyperlinkButton
x:Name="AlbumTextButton"
Grid.Row="0"
Grid.Column="2"
Margin="0,0,10,0"
VerticalAlignment="Center"
Click="Album_Click"
Content="{Binding Album}"
Foreground="{Binding IsPlaying, Converter={StaticResource PlaylistRowColorConverter}, ConverterParameter=Gray, Mode=OneWay}"
Style="{StaticResource TextBlockButtonStyle}"
Visibility="{x:Bind ShowAlbumText, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />