Ich habe so WPF verbindlich Code:OneWay stoppt Bindung zu arbeiten, nachdem das Ziel manuell
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");
Die zweite Behauptung versagt! Das erscheint mir seltsam.
Außerdem habe ich 'OneWayToSource' anstelle von 'OneWay' versucht, und alles funktioniert wie erwartet.
Bind(source, target, BindingMode.OneWayToSource);
target.Attribute = "1";
AssertAreEqual(source.Attribute, "1");
source.Attribute = "foo";
target.Attribute = "2";
AssertAreEqual(source.Attribute, "2");
Weitere Details:
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); }
}
}
Was mit meinem Code falsch?
Es macht Sinn, dass Wert gesetzt throught Stil den Template-Wert überschreiben wird, und der lokale Wert überschreibt den Style-Wert usw. Aber ich habe nichts davon. Also nicht sicher, das erklärt das Problem ... Danke irgendwie. – alex2k8
Dies erklärt auch nicht den Unterschied zwischen OneWay und OneWayToSource – alex2k8