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.
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.
Vous devez simplement appeler la méthode EDIT: en fait, ce n'est pas vrai... ProvideValue
de la liaison. Le plus difficile est de passer un IServiceProvider
valide à la méthode...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...
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 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.