WPFにおいて、Dependency Property同士をbindingしているのに何故かソースの値を変更してもターゲットの値が変わらなくてハマってしまいました。
原因はBinding.ModeにBindingMode.OneWayを指定していて、
かつ、ターゲットのDependency Propertyに値をセット(SetValue)してしまったことでした。
from mywpf import *
class FooObject(DependencyObject):
def __init__( self ):
pass
def __GetFoo( self ):
return self.GetValue( FooObject.FooProperty )
def __SetFoo( self, value ):
self.SetValue( FooObject.FooProperty, value )
Foo = property( __GetFoo, __SetFoo )
FooObject.FooProperty = DependencyProperty.Register( 'Foo', String, FooObject )
class BarObject(DependencyObject):
def __init__( self ):
pass
def __GetBar( self ):
return self.GetValue( BarObject.BarProperty )
def __SetBar( self, value ):
self.SetValue( BarObject.BarProperty, value )
Bar = property( __GetBar, __SetBar )
BarObject.BarProperty = DependencyProperty.Register( 'Bar', String, BarObject )
foo = FooObject()
bar = BarObject()
BindingOperations.SetBinding( bar, BarObject.BarProperty, Binding( 'Foo', Source=foo, Mode=BindingMode.OneWay ) )
foo.Foo = 'This is Foo.' # bindingは維持している
print bar.Bar # 'This is Foo'が表示される
bar.Bar = 'This is Bar.' # bindingが外される
print foo.Foo # 'This is Foo'のまま
foo.Foo = 'This is not Bar.' # bar.Barには反映されない
print bar.Bar # 'This is Bar'が表示される