tengo tal código de enlace de WPF:OneWay paradas de unión a trabajar después de que el objetivo de actualizar manualmente
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 segunda afirmación falla! Esto me parece extraño.
Además, probé 'OneWayToSource' en lugar de 'OneWay', y todo funciona como se esperaba.
Bind(source, target, BindingMode.OneWayToSource);
target.Attribute = "1";
AssertAreEqual(source.Attribute, "1");
source.Attribute = "foo";
target.Attribute = "2";
AssertAreEqual(source.Attribute, "2");
Otros detalles:
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); }
}
}
Lo que está mal con mi código?
Indica que el valor establecido a través del estilo anulará el valor de la plantilla, y el valor local anulará el valor del estilo, etc. Pero no tengo nada de esto. Así que no estoy seguro de que esto explique el problema ... Gracias de todos modos. – alex2k8
Además, esto no explica la diferencia entre OneWay y OneWayToSource – alex2k8