12 votes

Obtenir le résultat d'une liaison dans le code

Je cherche probablement de la mauvaise manière, mais:

existe-t-il un moyen d'obtenir la valeur résultante d'une liaison à travers le code?

Probablement quelque chose d'évident, mais je n'arrive tout simplement pas à le trouver.

11voto

Thomas Levesque Points 141081

Vous devez simplement appeler la méthode ProvideValue de la liaison. Le plus difficile est de passer un IServiceProvider valide à la méthode... EDIT: en fait, ce n'est pas vrai... ProvideValue renvoie une BindingExpression, pas la valeur de la propriété liée.

Vous pouvez utiliser le tour suivant:

class DummyDO : DependencyObject
{
    public object Value
    {
        get { return (object)GetValue(ValueProperty); }
        set { SetValue(ValueProperty, value); }
    }

    public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(object), typeof(DummyDO), new UIPropertyMetadata(null));

}

public object EvalBinding(Binding b)
{
    DummyDO d = new DummyDO();
    BindingOperations.SetBinding(d, DummyDO.ValueProperty, b);
    return d.Value;
}

...

Binding b = new Binding("Foo.Bar.Baz") { Source = dataContext };
object value = EvalBinding(b);

Pas très élégant, mais ça fonctionne...

0voto

Pour obtenir les données qui sont liées à un élément, après qu'un événement se produit, on peut se référer à la propriété DataContext. Cela renvoie l'élément de données lié.

Par exemple, je voulais obtenir le texte d'une zone de texte dans l'événement TextChanged.

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    var box = sender as TextBox;
    var value = box.DataContext as ObjectName; // ObjectName étant le type d'objet lié dans la liste
    ...
}

Cela vous permet d'obtenir la valeur de la liaison à une liste. Pratique pour les événements de clic, par exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X