ConverterProxy ru - Leksiqq/WpfMarkupExtension GitHub Wiki

Класс ConverterProxy

адаптер, являющийся MarkupExtension для конвертеров IValueConverter или IMultiValueConverter, которые не являются MarkupExtension и не могут ими стать, так как уже унаследованы от другого типа, но требуются там, где ожидается MarkupExtension.

Реализует интерфейсы IValueConverter и IMultiValueConverter.

Свойства

  • public IValueConverter? Converter {get; set;} - DependencyProperty, содержащая, если присвоена, ссылку на реальный конвертер, реализующий интерфейс IValueConverter.
  • public IValueMultiConverter? MultiConverter {get; set;} - DependencyProperty, содержащая, если присвоена, ссылку на реальный конвертер, реализующий интерфейс IValueMultiConverter.

Пример

Рассмотрим ситуацию, когда мы хотим использовать в качестве конвертера потомка класса UserControl, чтобы как-то использовать его внутреннее состояние. При этом мы в свойстве Converter типа Binding не можем задать {Binding ...}. Класс ConverterProxy как раз помогает решить эту проблему.

В файле MyControl.xaml:

<UserControl
    x:Class="MyControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:l="clr-namespace:Net.Leksi.WpfMarkup;assembly=Net.Leksi.WpfMarkupExtension"
    x:Name="mc"
    >
    <UserControl.Resources>
        <ResourceDictionary>
            <l:ConverterProxy Converter="{Binding  ElementName=mc}" x:Key="Converter"/>
        </ResourceDictionary>
    </UserControl.Resources>
    <StackPanel>
        <TextBox Text="{Binding Value, Converter={StaticResource Converter}"/>
    </StackPanel>
</UserControl>

В файле MyControl.xaml:

public partial class MyControl: UserControl, IValueConverter
{
    public string Value 
    {
        get 
        {
            ...
        }
        set 
        {
            ...
        }
    }
    ...
    public MyControl()
    {
        InitializeComponent();
    }
    ...
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ...
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ...
    }
}

Раньше: (BoolExpressionConverter) Начало:(Обзор) Дальше:(Демо)

⚠️ **GitHub.com Fallback** ⚠️