.net 通过object[property]而不是object.property绑定到对象的属性
我已经通读了WPF数据绑定概述,我觉得这应该是可能的,但我不能在这里进行思想上的飞跃。我知道如果我将绑定的.net 通过object[property]而不是object.property绑定到对象的属性,.net,wpf,binding,ironpython,.net,Wpf,Binding,Ironpython,我已经通读了WPF数据绑定概述,我觉得这应该是可能的,但我不能在这里进行思想上的飞跃。我知道如果我将绑定的路径设置为foo,并将源代码设置为obj,那么绑定将查看obj.foo。换句话说,将访问对象 我只想让它看起来像obj[foo]。我使用的是Ironpython,在本例中,我的obj类有一个被重写的\uu getitem\uuuuuu()调用一个成员函数并返回一个值,这就是我需要此功能的原因 下面是以编程方式编写的上述示例。这将在复选框中显示obj的foo属性: myBinding = Bi
路径设置为foo
,并将源代码设置为obj
,那么绑定将查看obj.foo
。换句话说,将访问对象
我只想让它看起来像obj[foo]
。我使用的是Ironpython,在本例中,我的obj
类有一个被重写的\uu getitem\uuuuuu()
调用一个成员函数并返回一个值,这就是我需要此功能的原因
下面是以编程方式编写的上述示例。这将在复选框中显示obj
的foo
属性:
myBinding = Binding("foo")
myBinding.Source = obj
acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding)
解决方案
显然就这么简单
myBinding = Binding("[foo]")
myBinding.Source = obj
acheckbox.SetBinding(CheckBox.IsCheckedProperty, myBinding)
您可以在绑定中使用它,例如,如果myDataContext
/source具有属性
public string this[int i]
{
get{...}
set{...}
}
您可以创建如下绑定:
<TextBlock Text="{Binding [0]}"/>
编辑:我觉得我可能误解了你的问题,如果是,请告诉我。哇,真的那么简单吗?将绑定路径设置为[foo]
并将源代码设置为obj
是否会使绑定访问obj[foo]
?NotifyPropertyChanged未更新其目标时遇到问题,我想这是由于路径为[foo]
。绑定正确地更新了它的源(实际上是它的datacontext),但是如果我在代码中更改了属性,然后调用OnPropertyChanged(“foo”)
,目标就不会更新。凭直觉,我甚至尝试将调用更改为OnPropertyChanged([foo]”)
,但仍然不起作用。有什么想法吗?如果需要的话,我会转移到一个单独的问题。调用OnPropertyChanged(Binding.IndexerName)
,看看这是否有效。难以置信的是,它有效。我对这是一种什么样的遥远的巫毒魔法感到困惑,于是我找到了这篇文章:-显然这是一个常数,“Item[]”
,它告诉绑定引擎重新扫描整个词典。不幸的是,在我的代码中,这恰好是一个昂贵的操作。。。因此,这篇文章也谈到了使用“Item[“+key+”]”“
作为参数。这正是我需要的——但它不起作用!只有项[]
有效。我想我得把这个问题带到它自己的问题上去。。。