ConverterProxy ru - Leksiqq/WpfMarkupExtension GitHub Wiki
адаптер, являющийся 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) Начало:(Обзор) Дальше:(Демо)