Как управлять видимостью представления внутри основных элементов в MasterDetailsView - PullRequest
0 голосов
/ 14 июля 2020

Я ищу способ управлять видимостью вложенных элементов в списке для MasterDetailsView. Есть ли способ использовать созданное мной логическое значение ShowButton для управления видимостью элемента (кнопка «Больше» - с многоточием) в элементах списка, используемых в моем MasterDetailsView? Нужно ли мне использовать свойства зависимостей в этом случае или нужно использовать что-то еще?

Ожидаемый результат

enter image description here

Current result

image

Класс товара (электронная почта)

public class Email
{
    public string From { get; set; }
    public string Body { get; set; }
    public bool ShowButton { get; set; }
}

public class MyEmailManager
{
    public static List<Email> GetEmails()
    {
        var MyEmails = new List<Email>
        {
            new Email
            {
                From = "Steve Johnson",
                Body = "Are you available for lunch tomorrow? A client would like to discuss a project with you.",
                ShowButton = true
            },
            new Email
            {
                From = "Pete Davidson",
                Body = "Don't forget the kids have their soccer game this Friday. We have to supply end of game snacks.",
                ShowButton = false
            },
            new Email
            {
                From = "OneDrive",
                Body = "Your new album.\r\nYou uploaded some photos to your OneDrive and automatically created an album for you.",
                ShowButton = false
            },
            new Email
            {
                From = "Twitter",
                Body = "Here are some people we think you might like to follow:\r\n.@randomPerson\r\nAPersonYouMightKnow",
                ShowButton = true
            }
        };

        return MyEmails;
    }
}

1 Ответ

0 голосов
/ 14 июля 2020

Нужно ли мне использовать свойства зависимостей в этом случае или нужно использовать что-то еще?

В этом случае вам не нужно использовать свойства зависимостей, вы можете связать MoreBtn Visibility в свойство ShowButton напрямую.

<Button Grid.Column="1" 
        x:Name="MoreBtn" 
        Background="Transparent" 
        Content="&#xE712;" 
        Visibility="{Binding ShowButton}"
        FontFamily="Segoe MDL2 Assets"
        HorizontalAlignment="Right"
        VerticalAlignment="Top"
        Margin="10" 
        Padding="10" 
        Click="MoreBtn_Click"/>

Начиная с Windows 10, версии 1607 , платформа XAML предоставляет встроенное логическое значение Конвертер видимости. Конвертер сопоставляет true со значением перечисления Visible и false со значением Collapsed, поэтому вы можете связать свойство Visibility с логическим значением без создания конвертера. Чтобы использовать встроенный конвертер, минимальная целевая версия SDK вашего приложения должна быть 14393 или более поздней. Вы не можете использовать его, если ваше приложение нацелено на более ранние версии Windows 10. Для получения дополнительной информации о целевых версиях см. Адаптивный код версии.

Для предыдущей версии мы могли использовать BoolToVisibilityConverter для преобразования bool в видимость (установите Microsoft.Toolkit.Uwp.UI пакет nuget).

Использование

<Page
    x:Class="MasterDetailViewTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
    xmlns:converters="using:Microsoft.Toolkit.Uwp.UI.Converters"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="using:MasterDetailViewTest"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    mc:Ignorable="d"
    >

<Page.Resources>
    <converters:BoolToVisibilityConverter x:Key="MyConveter" />
</Page.Resources>

......

<Button
    x:Name="MoreBtn"
    Grid.Column="1"
    Margin="10"
    Padding="10"
    HorizontalAlignment="Right"
    VerticalAlignment="Top"
    Background="Transparent"
    Click="MoreBtn_Click"
    Content="&#xE712;"
    FontFamily="Segoe MDL2 Assets"
    Visibility="{Binding ShowButton, Converter={StaticResource MyConveter}}"
    />
...