(Доктрина с Symfony 4) Сначала упорядочить по ненулевым объектам с левым соединением?

Вы можете привязываться к целевому объекту, а затем указать, какое свойство источника вы хотите установить. Вы должны попытаться установить свойство source, когда задано какое-либо из целевых свойств. Попробуйте следующее:

public class RoutePropertyValue : Behavior<FrameworkElement>
{
    public object Source
    {
        get => GetValue(SourceProperty);
        set => SetValue(SourceProperty, value);
    }

    public static readonly DependencyProperty SourceProperty = DependencyProperty.Register(nameof(Source), typeof(object), 
        typeof(RoutePropertyValue), new PropertyMetadata(null, Callback));

    private static void Callback(DependencyObject d, DependencyPropertyChangedEventArgs args)
    {
        if (d is RoutePropertyValue instance)
            instance.OnAnyValueChanged();
    }

    protected virtual void OnAnyValueChanged()
    {
        if (!string.IsNullOrEmpty(TargetMember))
            TargetObject?.GetType().GetProperty(TargetMember)?.SetValue(TargetObject, Source);
    }

    public object TargetObject
    {
        get => GetValue(TargetObjectProperty);
        set => SetValue(TargetObjectProperty, value);
    }

    public static readonly DependencyProperty TargetObjectProperty = DependencyProperty.Register(nameof(TargetObject), typeof(object), 
        typeof(RoutePropertyValue), new PropertyMetadata(null, Callback));

    public string TargetMember
    {
        get => (string)GetValue(TargetMemberProperty);
        set => SetValue(TargetMemberProperty, value);
    }

    public static readonly DependencyProperty TargetMemberProperty = DependencyProperty.Register(nameof(TargetMember), typeof(string),
        typeof(RoutePropertyValue), new PropertyMetadata(null, Callback));
}

XAML:

<behaviors:RoutePropertyValue 
    TargetObject="{Binding}"
    TargetMember="Index"
    Source="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=(ItemsControl.AlternationIndex)}"
    />
0
задан Brent Heigold 19 January 2019 в 23:08
поделиться