在Silverlight中使用属性绑定更改DataTemplate

时间:2011-11-21 19:31:04

标签: silverlight-4.0 mvvm datatemplate caliburn.micro

我正在尝试使用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()方法,它永远不会被击中。

所有建议都非常感谢!

1 个答案:

答案 0 :(得分:0)

不确定您是否已经弄清楚了这一点,但将转换器定义放置在与DataTemplate关系的Resource中将是它工作和不工作之间的区别。

转换器需要放在数据模板之前。