je mis à jour manuellement ce code de liaison WPF:la liaison OneWay travail arrête après la cible
TestModel source = new TestModel();
TestModel target = new TestModel();
Bind(source, target, BindingMode.OneWay);
source.Attribute = "1";
AssertAreEqual(target.Attribute, "1");
target.Attribute = "foo";
source.Attribute = "2";
AssertAreEqual(target.Attribute, "2");
La seconde assertion échoue! Cela semble étrange pour moi.
En outre, j'ai essayé 'OneWayToSource' au lieu de 'OneWay', et tout fonctionne comme prévu.
Bind(source, target, BindingMode.OneWayToSource);
target.Attribute = "1";
AssertAreEqual(source.Attribute, "1");
source.Attribute = "foo";
target.Attribute = "2";
AssertAreEqual(source.Attribute, "2");
Autres détails:
void Bind(TestModel source, TestModel target, BindingMode mode)
{
Binding binding = new Binding();
binding.Source = source;
binding.Path = new PropertyPath(TestModel.AttributeProperty);
binding.Mode = mode;
BindingOperations.SetBinding(target, TestModel.AttributeProperty, binding);
}
class TestModel : DependencyObject
{
public static readonly DependencyProperty AttributeProperty =
DependencyProperty.Register("Attribute", typeof(string), typeof(TestModel), new PropertyMetadata(null));
public string Attribute
{
get { return (string)GetValue(AttributeProperty); }
set { SetValue(AttributeProperty, value); }
}
}
Quel est le problème avec mon code?
Cela fait que la valeur définie par le style remplacera la valeur du modèle, et la valeur locale remplacera la valeur du style, etc. Mais je n'ai rien de tout cela. Donc pas sûr que cela explique le problème ... Merci de toute façon. – alex2k8
En outre, cela n'explique pas la différence entre OneWay et OneWayToSource – alex2k8