Question Liaison de données de propriété attachée WPF


J'essaie d'utiliser la liaison avec une propriété attachée. Mais ne peut pas le faire fonctionner.

public class Attached
{
    public static DependencyProperty TestProperty =
        DependencyProperty.RegisterAttached("TestProperty", typeof(bool), typeof(Attached),
        new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Inherits));

    public static bool GetTest(DependencyObject obj)
    {
        return (bool)obj.GetValue(TestProperty);
    }

    public static void SetTest(DependencyObject obj, bool value)
    {
        obj.SetValue(TestProperty, value);
    }
}

Le code XAML:

<Window ...>
    <StackPanel local:Attached.Test="true" x:Name="f">
        <CheckBox local:Attached.Test="true" IsChecked="{Binding (local:Attached.Test), Mode=TwoWay, RelativeSource={RelativeSource Self}}" />
        <CheckBox local:Attached.Test="true" IsChecked="{Binding (local:Attached.Test), Mode=TwoWay}" />
    </StackPanel>
</Window>

Et l'erreur de liaison:

System.Windows.Data Error: 40 : BindingExpression path error: '(local:Attached.Test)' property not found on 'object' ''StackPanel' (Name='f')'. BindingExpression:Path=(local:Attached.Test); DataItem='StackPanel' (Name='f'); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Nullable`1')

52
2018-04-29 12:45


origine


Réponses:


Croyez-le ou non, ajoutez simplement Path= et utiliser des parenthèses lors de la liaison à une propriété attachée:

IsChecked="{Binding Path=(local:Attached.Test), Mode=TwoWay, RelativeSource={RelativeSource Self}}"

En outre, votre appel à RegisterAttached devrait passer dans "Test" comme nom de propriété, pas "TestProperty".


141
2018-04-29 12:48



J'aurais préféré poster ceci comme un commentaire sur la réponse de Kent, mais comme je n'ai pas assez de représentants pour le faire ... je voulais juste signaler que depuis WPF 4.5, ajouter Path= n'est plus nécessaire. Toutefois, le nom de la propriété jointe doit toujours être entouré de parenthèses.


16
2018-04-12 15:35