这是一个类似于WPF Binding : Casting in binding path的问题,我需要在XAML绑定语句中强制转换对象。但我似乎无法理解如何在我的特定情况下制作装订。WPF Casting in Binding Path
该问题的答案参考PropertyPath XAML Syntax,相关部分是(我相信)Single Property, Attached or Otherwise Type-Qualified
。
对我来说,在我的主视图模型我有一个映射字符串实现基本接口的对象字典:
Dictionary<string, IFlintStone> FlintStones { get; set;}
public interface IFlintStone { Walk, Talk etc}
public class FlintStone : IFlintStone { .. }
不过我也有这些额外的对象和接口继承的基础对象:
public interface IFred : IFlintStone { Eat, Drink, Yell etc }
public interface IWilma : IFlintStone { Wash, Clean, Cook etc }
public class Fred : FlintStone, IFred {..}
public class Wilma : FlintStone, IWilma {..}
,最终我填充我的字典,如:
FlintStones["Fred"] = new Fred();
FlintStones["Wilma"] = new Wilma();
现在,在我的XAML中,我有一个用于呈现对象Fred
的用户控件,另一个用于呈现对象Wilma
。但是我的理解是,这只会暴露这些对象的IFlintStone
组件各自的用户控件
<FredControl DataContext="{Binding Path=FlintStones[Fred]}" />
<WilmaControl DataContext="{Binding Path=FlintStones[Wilma]}" />
:我可以设置这些用户控件做类似的数据上下文。但是,我要公开IFred
到<FredControl>
和IWilma
到<WilmaControl>
这是可能的,并会结合语法,在这种情况下怎么办?
使用从我上面提到的链接的想法,我已经试过的东西,如:
<FredControl DataContext="{Binding path=(myns:Fred.FlintStones[Fred])}" />
和
<FredControl DataContext="{Binding path=(myns:Fred).FlintStones[Fred]}" />
(其中myns
是一个XAML命名空间定义指向Fred
对象在装配)
但是该程序在启动时崩溃或烧坏,或者它抱怨找不到Fred
作为当前数据上下文的属性。
这是复杂的绑定语法的一个非常明显的例子。我不知道智能感知是否可以在您输入时使用? – 2014-10-07 21:47:35
失踪}是在现场..我真的没有类叫弗雷德和威尔玛 – 2014-10-07 21:55:25
@PeterM - 我会从答案中删除该部分。我想我应该意识到这一点。当然你会知道绑定语法。 – 2014-10-07 22:01:28