UWP Image.Source привязка с конвертером - PullRequest
0 голосов
/ 27 апреля 2020

В моем коде у меня есть класс со следующими полями:

public class Source
{
    public string Name { get; set; }
    ...

    public string Path { get => $"/Assets/Images/{Name}.svg"; }
}

Свойство Path есть только для отладки.

Я также разрабатываю конвертер, чтобы избавиться от Path свойство.

public class SourceToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return $"/Assets/Images/{value}.svg";
    }
}

Когда я использую свойство Path в качестве источника изображения, все работает нормально, но когда я пытаюсь сделать то же самое с SourceToImageConverter, приложение не работает. Я знаю, что конвертер работает, так как он должен вызывать, когда я использую его в TextBlock, он показывает правильное значение. Код Xaml выглядит так:

<Page.Resources>
    <local:SourceToImageConverter x:Key="SourceToImage"/>
    <DataTemplate x:Key="SourceListViewTemplate" x:DataType="models:Source">
        <StackPanel Orientation="Horizontal">
            <Image Source="{x:Bind Path}"/>
            <Image Source="{x:Bind Name, Converter={StaticResource SourceToImage}}"/>
            <TextBlock Text="{x:Bind Name, Converter={StaticResource SourceToImage}}"/>
        </StackPanel>
    </DataTemplate>
</Page.Resources>

...

<GridView
    x:Name="Source"
    ItemsSource="{x:Bind ViewModel.Sources}"
    ItemTemplate="{StaticResource SourceListViewTemplate}"
    IsItemClickEnabled="True"
    SelectionMode="Single"/>

1 Ответ

0 голосов
/ 27 апреля 2020

Применить XamlBindingHelper.ConvertValue () к значению так же, как автоматически сгенерированный код {x: Bind} выполняет за кулисами.

public class SourceToImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        //if (targetType == typeof(string)) return $"/Assets/Images/{value}.svg";

        return XamlBindingHelper.ConvertValue(typeof(ImageSource), $"/Assets/Images/{value}.svg"); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...