Python 更新绑定到对象[property](binding.IndexerName weirdness)的绑定
这是从我的经历中产生的。我目前拥有以下绑定:Python 更新绑定到对象[property](binding.IndexerName weirdness)的绑定,python,wpf,binding,ironpython,inotifypropertychanged,Python,Wpf,Binding,Ironpython,Inotifypropertychanged,这是从我的经历中产生的。我目前拥有以下绑定: myBinding = Binding("[foo]") myBinding.Mode = System.Windows.Data.BindingMode.TwoWay myBinding.Source = obj acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding) acheckbox.DataContext = obj 这将查看obj[foo]。用户界面将很好
myBinding = Binding("[foo]")
myBinding.Mode = System.Windows.Data.BindingMode.TwoWay
myBinding.Source = obj
acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding)
acheckbox.DataContext = obj
这将查看obj[foo]
。用户界面将很好地更新源代码-我可以选中复选框并更改obj[foo]
。然而,反过来是行不通的。在代码中更改obj[foo]
不会更新UI,即使此代码手动调用OnPropertyChanged
:
obj[foo] = False
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs("[foo]"))
问题可能在于OnPropertyChanged
的参数。一些挖掘(以及H.B.的帮助)揭示了这篇文章:
如果要为创建数据源
这些(例如,您正在构建
你自己的医生),你
我可能想知道你到底是怎么把火点燃的
适当的
INotifyPropertyChanged.PropertyChanged
事件通知绑定系统
使用该字段名或
索引已更改
装订系统
正在查找名为的属性
“Item[]”
,由常量定义
字符串绑定。索引器名称
换句话说,Binding.IndexerName
是一个常量,“Item[]”
,它告诉绑定引擎重新扫描整个源词典
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs(Binding.IndexerName))
# equivalent to:
obj._OnPropertyChanged(obj, System.ComponentModel.PropertyChangedEventArgs("Item[]"))
不幸的是,在我的代码中,扫描整个源代码字典恰好是一项昂贵的操作;因此,这篇文章也谈到了使用“Item[foo]”
作为参数。这正是我需要的——但它不起作用!只有项[]
有效。为什么?根据Item[index]
中的Mamader2,它只适用于Silverlight 4
(我从来没有想到Silverlight支持WPF不支持的东西)我对此表示怀疑,因为绑定机制是非常内部的。看来我必须回到重写
\uuuuu getattr\uuuuuu
和\uu setattr\uuuuuu
,然后。瘸的