到目前为止我所想到的:我认为除了我的问题集之外,我可以使用反射创建另一个特定类型的集合,并以某种方式将其绑定到“blah”,然后我会得到所需的效果,但是你只能绑定到WPF中的DependencyPropertIEs,所以我不确定我绑定到什么.我真的不喜欢这个想法,我的直觉告诉我有一个更优雅的方法来解决这个问题.
我不是在寻找具体的代码,只是一个完成我想要做的事情的一般策略.另外,如果有帮助的话,我大部分时间都在使用MVVM.
谢谢
解决方法@H_502_10@ 我认为这样的东西应该是开箱即用的:<UserControl.Resources> <DataTemplate DataType="{x:Type vm:GenericQuestionviewmodel}"> <v:GenericQuestion/> </DataTemplate> <DataTemplate DataType="{x:Type tvm:GeographyQuestionviewmodel}"> <tv:GeographyQuestion/> </DataTemplate> <DataTemplate DataType="{x:Type tvm:BiologyQuestionviewmodel}"> <tv:BiologyQuestion/> </DataTemplate></UserControl.Resources><ContentControl Content="{Binding Questionviewmodel}">
编辑:
是的,这绝对应该有效.这是一个更完整的例子:
主视图模型
public class MainWindowviewmodel : viewmodelBase{ public ObservableCollection<Questionviewmodel> Questionviewmodels { get; set; } public MainWindowviewmodel() { Questionviewmodels = new ObservableCollection<Questionviewmodel> { new GenericQuestionviewmodel(),new GeographyQuestionviewmodel(),new BiologyQuestionviewmodel() }; }}
问题查看模型
public abstract class Questionviewmodel : viewmodelBase{}public class GenericQuestionviewmodel : Questionviewmodel{}public class GeographyQuestionviewmodel : Questionviewmodel{}public class BiologyQuestionviewmodel : Questionviewmodel{}
问题用户控制
<UserControl x:Class="WpfApplication1.GenericQuestion" ...> <GrID> <TextBlock Text="Generic Question" /> </GrID></UserControl><UserControl x:Class="WpfApplication1.GeographyQuestion" ...> <GrID> <TextBlock Text="Geography Question" /> </GrID></UserControl><UserControl x:Class="WpfApplication1.BiologyQuestion" ...> <GrID> <TextBlock Text="Biology Question" /> </GrID></UserControl>
主窗口
<Window x:Class="WpfApplication1.MainWindow" ... title="MainWindow" Height="900" WIDth="525"> <Window.DataContext> <local:MainWindowviewmodel /> </Window.DataContext> <Window.Resources> <DataTemplate DataType="{x:Type local:GenericQuestionviewmodel}"> <local:GenericQuestion /> </DataTemplate> <DataTemplate DataType="{x:Type local:GeographyQuestionviewmodel}"> <local:GeographyQuestion /> </DataTemplate> <DataTemplate DataType="{x:Type local:BiologyQuestionviewmodel}"> <local:BiologyQuestion /> </DataTemplate> </Window.Resources> <ItemsControl ItemsSource="{Binding Questionviewmodels}"> <ItemsControl.ItemTemplate> <DataTemplate> <ContentControl Content="{Binding}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl></Window>
更新
Kyle Tolle指出了一个很好的简化设置ItemsControl.ItemTemplate.这是结果代码:
<ItemsControl ItemsSource="{Binding Questionviewmodels}" ItemTemplate="{Binding}" />总结
以上是内存溢出为你收集整理的c# – WPF中的DataTemplates全部内容,希望文章能够帮你解决c# – WPF中的DataTemplates所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)