我正在尝试使用Eugene Akinshin的代码来实现这一点:http://forums.silverlight.net/t/237947.aspx/1
这似乎是绑定到已存在的属性的一种非常好的方式,并且意味着可以在XAML中定义所有配置。
然而,我无法让它发挥作用。
我正在定义要使用的模板:
<Converters:TemplateSelectorConverter x:Key="templateConverter">
<Converters:TemplateSelectorCase TemplateReference="Minimised" Template="{StaticResource SmallOrders}"/>
<Converters:TemplateSelectorCase TemplateReference="Restored" Template="{StaticResource MediumOrders}"/>
<Converters:TemplateSelectorCase TemplateReference="Maximised" Template="{StaticResource LargeOrders}"/>
</Converters:TemplateSelectorConverter>
然后像我这样设置ListBox
的项目模板:
ItemTemplate="{Binding CurrentState, Converter={StaticResource templateConverter}}"
CurrentState
是'Minimized','Maximized'或'Restored'的字符串(我编辑了链接的示例,将字符串作为键而不是int)并设置为'Minimized '默认情况下,但我得到的是Cannot create [my object type]
中 ListBox
的列表。
模板绝对有效,因为我可以在ViewModel中公开View并在代码中设置DataTemplate,并且有可视状态依赖于相同的CurrentState
属性,因此我知道View可以访问财产正确。不幸的是,如果我断开转换器中的Convert()
方法,它永远不会被击中。
所有建议都非常感谢!
答案 0 :(得分:0)
不确定您是否已经弄清楚了这一点,但将转换器定义放置在与DataTemplate关系的Resource中将是它工作和不工作之间的区别。
转换器需要放在数据模板之前。