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) Начало:(Обзор) Дальше:(Демо)