在我的数据库中,我有一个表,其中包含不同的userControls项,其属性为“ClassName”,“AssemblyName”和“NameSpace”,这些都是使用反射初始化实例的必要条件.
我的想法是要从数据库中获取此集合,将集合设置为数据上下文,并将这些用户控件动态加载到tabcontrol中.我可以使用一个“tabItem”来包含它,并在运行时在代码中加载它.如果它可以直接从模板中的XAML完成,我想它会非常方便和花哨.
我一直在谷歌搜索类似的东西,但没有使用代码背后发现什么.
我在考虑以下内容
<TabControl.ContentTemplate>
<DataTemplate>
<xxxControl ClassName="{Binding ClassName}" AssemblyName="{Binding AssemblyName}" NameSpace="{Binding NameSpace}" />
</DataTemplate>
</TabControl.ContentTemplate>
我可以制作这样一个自定义的“xxxControl”,但如果这样的东西已经存在,那将浪费时间.这种方式GUI可以由DB中的参数完全生成.
最佳答案 你可以使用
markup extensions在XAML中做很多事情,在这种情况下你可以创建一个从给定信息中实例化控件的东西.为此,它需要一些可以绑定的依赖属性,然后在
ProvideValue
中它将获得程序集,构造全名并实例化它.
用法:
<DataTemplate>
<me:Instance Assembly="{Binding AssemblyName}"
NameSpace="{Binding NameSpace}"
Class="{Binding ClassName}"/>
</DataTemplate>
显然你仍然有代码隐藏,但它应该如何,命令式代码根本不属于XAML.
另外我怀疑你的数据库应该包含有关UI控件的信息……