UWP 绑定不显示空值

UWP Binding not showing empty value

我有一个 ListView 包含 Music 列表(我的 ViewModel),Music 有一个 string 属性 Album .

然而,当 Album 为空时,意味着它只是 "",容纳 Album 的容器(HyperTextButton)不显示空值.相反,它显示 Music.ToString() 的值。而且虽然显示的是Music字符串,但是HyperTextButton的内容确实是空的,这可以在HyperTextButton.

的点击事件中得到证实

如何让它正确显示空字符串?

这是ListViewItemTemplate

    <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.

ItemTemplatehere.

通过检查你的代码,主要问题在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}" />