Привязка UWP не показывает пустое значение - PullRequest
0 голосов
/ 08 октября 2019

У меня есть ListView, содержащий список Music (моя ViewModel), а Music имеет свойство string Album.

Однако, когда Album пусто,это означает, что это просто "", контейнер (a HyperTextButton), который содержит Album, не показывает пустое значение. Вместо этого он показывает значение Music.ToString(). И хотя он показывает строку Music, содержимое HyperTextButton фактически пусто, как и ожидалось, что может быть подтверждено в событии щелчка HyperTextButton.

. Как мне сделать это правильноотобразить пустую строку?

Это ItemTemplate из ListView:

    <local:PlaylistControlItem DataContext="{x:Bind}" ShowAlbumText="{Binding ElementName=PlaylistController, Path=ShowAlbumText}">
        <local:PlaylistControlItem.ContextFlyout>
            <MenuFlyout Opening="OpenMusicMenuFlyout" />
        </local:PlaylistControlItem.ContextFlyout>
    </local:PlaylistControlItem>

И это Control, которое показывает Album:

    <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 здесь здесь .

ItemTemplate здесь здесь .

1 Ответ

2 голосов
/ 08 октября 2019

При проверке кода основная проблема заключается в TextButtonStyle . В TextButtonStyle вы также используете textBlock для реализации привязки. Его DataContext - это Music, поэтому он иногда вызывает метод Music.toString, а в переписанном методе toString возвращается Path, так что это происходит.

Самое быстрое решение - установить для DataContext AlbumTextButton значение Music.Album (здесь изменяется только DataContext для AlbumTextButton, а не контекст страницы.), Так что textBlock будет связанв альбом. В этом случае вам не нужно привязывать альбом к содержимому кнопки. Или вы можете изменить содержимое в стиле.

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}" />
...