有没有人有一个成功的解决方法,根据底层数据对象的属性更改silverlight中的样式,因为值的改变也是如此.我简单地使用
WPF,它显然有DataTrigger似乎涵盖了这一点,但它在Silverlight中缺少.
我找到了这个:
http://blois.us/blog/2009/04/datatrigger-bindings-on-non.html
但它似乎不适用于造型..
谢谢你的时间
解决方法
Silverlight不包含
DataTemplateSelector,用于基于数据绑定元素和数据对象来选择数据模板.但是,建立自己的并不难.
从继承自System.Windows.Controls.ContentControl的类开始.此类具有数据模板的属性和内容的属性,您可以使用该属性绑定到.创建一个这样的OnContentChanged方法的覆盖
protected override void OnContentChanged(object oldContent,object newContent) { }
我更喜欢将模板放在单独的字典中,以防万一我需要在项目之间共享它们.
在这种方法中,将该控件的模板设置为从字典中选取的模板.就像是:
Switch(DataStatus){ case 0: ContentTemplate = LoadFromDictionary( "DataTemplateDemo;component/DataTemplates.xaml","Status0Template"); break; case 1: ContentTemplate = LoadFromDictionary( "DataTemplateDemo;component/DataTemplates.xaml","Status1Template"); break; //etc }
在这种情况下,应该是具有几个数据模板的字典名称DataTemplates.xaml.
在您的xaml文件中,使用模板选择器类作为列表的模板:
<ListBox x:Name="AnInterrestingList"> <ListBox.ItemTemplate> <DataTemplate> <DataTemplateDemo:DateTemplateSelector Content="{Binding}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
我使用下面的帮助方法从字典中检索模板:
public static DataTemplate LoadFromDictionary(string dictionary,string template) { var doc = XDocument.Load(dictionary); var dict = (ResourceDictionary)XamlReader .Load(doc.ToString(SaveOptions.None)); return dict[template] as DataTemplate; }
更新
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。