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
,然后。瘸的