【问题标题】:UWP Binding not showing empty valueUWP 绑定不显示空值
【发布时间】:2020-02-05 07:37:52
【问题描述】:

我有一个 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>

这是显示AlbumControl

    <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

【问题讨论】:

    标签: c# xaml uwp win-universal-app


    【解决方案1】:

    通过检查您的代码,主要问题在于 TextButtonStyle。在 TextButtonStyle 中,您还可以使用 textBlock 来实现绑定。它的DataContext是Music,所以它有时会调用Music.toString方法,而在你重写的toString方法中返回Path,所以会出现这种情况。

    最快的解决方法是将AlbumTextButton的DataContext设置为Music.Album(这里改变的只是AlbumTextButton的DataContext,而不是Page的上下文),这样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}" />
    

    【讨论】:

    • 谢谢,但添加会使内容为空。
    • TextButtonStyle中的TextBlock已经实现了Binding,只需要修改DataContext即可。
    • 您的意思是简单地将HyperlinkButton 中的Content={Binding Album} 更改为DataContext={Binding Album}?这会使内容为空。
    • 是的。关于这个词:“那会使内容变空”。你的意思是在你测试之后,无论专辑是否有值,超链接按钮的内容总是显示为空?或者你认为改变后会导致空虚? HyperlinkBut​​ton 使用 TextButtonStyle,而 TextButtonStyle 有一个 TextBlock 可以显示内容。
    • OK,如果你使用style只是为了去掉下划线,你可以尝试使用系统提供的TextBlockButtonStyle,比如&lt;HyperlinkButton Style="{StaticResource TextBlockButtonStyle}" ......&gt;。这种用法也不会显示下划线。 TextButtonStyle 中的 TextBlock 确实是问题所在。如果之前提供的解决方案有问题,可以尝试从style来处理。
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2018-04-20
    • 2018-02-07
    • 2016-11-18
    • 2023-01-17
    相关资源
    最近更新 更多