Установить иконку с привязкой - PullRequest
0 голосов
/ 17 марта 2020

Я использую Mahapps Metro и Mahapps IconPack.

xmlns:icons="http://metro.mahapps.com/winfx/xaml/iconpacks"    

У меня есть Itemscontrols, что работает, как и ожидалось, например:

<ItemsControl ItemsSource="{Binding MyCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button>
                <icons:MaterialDesign Kind="Home"/>
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Теперь я хочу установить Icon из collection для каждого item.

<ItemsControl ItemsSource="{Binding MyCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button>
                <icons:MaterialDesign Kind="{Binding icon}"/>
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

У меня есть свойство, которое будет добавлено в коллекцию:

public MahApps.Metro.IconPacks.PackIconMaterialKind MyIcon = MahApps.Metro.IconPacks.PackIconMaterialKind.AbTesting;

Если я это сделаю, я получит следующую ошибку:

Binding 'может быть установлен только на DependencyProperty объекта DependencyObject.

Я пытался настроить DependencyObject следующим образом:

public static readonly DependencyProperty MyIcon =
        DependencyProperty.Register(nameof(MyIcon), typeof(MahApps.Metro.IconPacks.PackIconMaterialKind), typeof(MahApps.Metro.IconPacks.PackIconMaterialKind), new PropertyMetadata(null));

public MahApps.Metro.IconPacks.PackIconMaterialKind myIcon
{
    get { return (MahApps.Metro.IconPacks.PackIconMaterialKind)GetValue(dependencyProperty); }
    set { SetValue(dependencyProperty, value); }
}

Но GetValue и SetValue не распознаются.

Я также пытался установить это через style, но затем только string до icon будет установлен как content, а не как icon.

Может кто-нибудь, пожалуйста, объясните мне, где я потерялся, и как это сделать.

Большое спасибо.


Спасибо за комментарии. Я смог понять это.

Я добавил:

public PackIconMaterialDesign IconMaterialDesign => new PackIconMaterialDesign { Kind = PackIconMaterialDesignKind.AccessAlarm, Height = 30, Width = 30 };

А потом я смог связать это:

<Button Command="{Binding ViewModelRouter}"
        CommandParameter="{Binding ViewModelName}"
        Style="{StaticResource MenuButton}"
        Content="{Binding IconMaterialDesign}" >

1 Ответ

0 голосов
/ 17 марта 2020

Спасибо за комментарии. Я смог понять это.

Я добавил:

public PackIconMaterialDesign IconMaterialDesign => 
new PackIconMaterialDesign { Kind = 
PackIconMaterialDesignKind.AccessAlarm, Height = 30, 
Width = 30 };

А потом я смог связать это:

 <Button Command="{Binding ViewModelRouter}"
    CommandParameter="{Binding ViewModelName}"
    Style="{StaticResource MenuButton}"
    Content="{Binding IconMaterialDesign}" >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...