WPF数据绑定:绑定路径中的类型转换

48

我有一个绑定,其中Path被设置为Path=Item.Tag.caption,但我需要先将Item转换为IEDGE,这样才能访问Tag属性。是否有办法实现这一点?


你是在编码还是 Xaml 中完成这个操作? - Emond
我需要在Xaml中做这个。 - Aminouvic
@Aminouvic 如果 Item 实现了 IEDGE 并且 Tag 是一个属性,它应该像你发布的那样工作。你遇到了什么错误? - DHN
@DHN,问题在于绑定时Item的类型为object,然后我收到一个错误,指出Tag属性在object中未找到。 - Aminouvic
1个回答

88

最终解决该问题的方法是使用以下语法:

Path=Item.(myNameSpace:IEdge.Tag).caption

为了访问Tag属性,先将Item强制转换为类型IEdge

在多重嵌套强制转换的情况下,全局模式如下:

Path=Obj1.(ns1:TypeObj1.Obj2).(ns2:TypeObj2.Obj3)...(nsN:TypeObjN.BindedProp) 

正如评论中所建议的那样,在使用此解决方案时不要使用简写绑定语法。确保实际使用Path =,否则它将无法正常工作!


2
好的,我让它工作了,但是你在哪里找到这些信息?这似乎是一些WPF底层未记录的黑魔法... - Libor
4
@Libor :实际上我在 msdn 上找到了解决方案 PropertyPath XAML 语法,使用 属性部分限定符 参见部分 单个属性,关联或其他类型限定 - Aminouvic
5
对于我们这些身处2015年的人来说,@Aminouvic发布的链接已经不存在了。请访问https://web.archive.org/web/20120814100526/http://msdn.microsoft.com/en-us/library/ms742451.aspx。 - zastrowm
9
使用此解决方案时,请不要使用速记绑定语法。确保实际使用 Path=,否则它将无法工作。 - Andrew Stakhov
5
如果我只想进行强制类型转换,而不是像这样访问属性:Item.(myNameSpace:IEdge),会怎样?这会失败,因为它要求我访问IEdge的属性,但我只想将Item强制转换为IEdge - M.kazem Akhgary
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接