BindingProxyMarkup ru - Leksiqq/WpfMarkupExtension GitHub Wiki

Класс BindingProxyMarkup

Используется, когда необходимо разместить значение привязки там, где требуется расширение разметки.

Свойства

BindingProxy - объект типа BindingProxy содержащий привязку.

Примеры

Пример 1.

Пусть нам нужно использовать конкретный экземпляр конвертера или разные конвертеры, в зависимости от каких-то условий.

В AboutConverter.xaml.cs:

...
public IUniversalConverter Converter { get; init; }

public AboutConverter(IUniversalConverter converter)
{
    Converter = converter;
    InitializeComponent();
}
...

В AboutConverter.xaml:

<Window.Resources>
    <ResourceDictionary>
        <l:BindingProxy Value="{Binding Converter}" x:Key="ConverterProxy"/>
        <l:BindingProxyMarkup x:Key="Converter" BindingProxy="{StaticResource ConverterProxy}"/>
    </ResourceDictionary>
</Window.Resources>
<DockPanel LastChildFill="True">
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
        <TextBlock Text="Используется " FontSize="24"
                   Foreground="{Binding Converter={StaticResource Converter}, ConverterParameter=Color}"/>
        <TextBlock Text="{Binding Converter, Converter={StaticResource Converter}, ConverterParameter=Type}"
                   FontSize="24"
                   Foreground="{Binding Converter={StaticResource Converter}, ConverterParameter=Color}"/>
    </StackPanel>
</DockPanel>

В MainWindow.xaml нажатие соответствующей кнопки приводит к выбору конвертера для открывающегося диалога:

    <Button x:Name="Red" Content="Красный конвертер" Click="AboutConverter_Click"  Margin="10,10,10,10"/>
    <Button x:Name="Blue" Content="Синий конвертер" Click="AboutConverter_Click"  Margin="10,10,10,10"/>

В MainWindow.xaml.cs:

private void AboutConverter_Click(object sender, RoutedEventArgs e)
{
    if(sender is Button button) 
    {
        switch(button.Name) 
        {
            case "Red":
                new AboutConverter(new RedConverter()).ShowDialog();
                break;
            case "Blue":
                new AboutConverter(new BlueConverter()).ShowDialog();
                break;
        }
    }
}

Этот пример взят из Демо.

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

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