...<ItemsControl ItemsSource="{Binding FIElds}" />...
FIEldVM是一个抽象类,由TextFIEldVM和EnumFIEldVM等类实现.在运行期间,这些FIEldVM实现被添加到FIElds属性,我希望它们在我的视图中显示与其关联的视图.
在WPF中,这样做很简单,我一直都这样做.您只需在适当的资源字典中执行此 *** 作,并且一切都按预期方式工作:
<DataTemplate DataType="{x:Type vm:TextFIEldVM}"> <v:TextFIEldVIEw /></DataTemplate><DataTemplate DataType="{x:Type vm:EnumFIEldVM}"> <v:EnumFIEldVIEw /></DataTemplate>
现在,Silverlight第一次工作,我希望我可以做同样的事情,但DataTemplate没有DataType属性.我被困了Silverlight的做法是什么?
解决方法 使用值转换器将类型绑定到每个视图的可见性:<DataTemplate> <GrID> <v:EnumFIEldVIEw Visibilty="{Binding Converter={StaticResource VIEwVisibilityConverter},ConverterParameter=Enum}" /> <v:TextFIEldVIEw Visibilty="{Binding Converter={StaticResource VIEwVisibilityConverter},ConverterParameter=Text}" /> </GrID</DataTemplate>
在VIEwVisibilityConverter的ConvertTo中,根据类型切换可见性.
另一种查看方式是使用不同类型的值转换器从Application.Resources返回不同的数据模板.
<ListBox ItemTemplate="{Binding Converter={StaticResource ItemTemplateFactory}"/>
在ItemTemplateFactory.Convert()中:
var fIEldVM = value as FIEldVM;switch fIEldVM.FIEldType:{ case "Text": return Application.Current.Resources["TextTemplate"] as DataTemplate; case "Enum": return Application.Current.Resources["EnumTemplate"] as DataTemplate;}总结
以上是内存溢出为你收集整理的.net – Silverlight中的DataTemplate.DataType替代全部内容,希望文章能够帮你解决.net – Silverlight中的DataTemplate.DataType替代所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)