c# – 是否可以直接在XAML中使用反射

在我的数据库中,我有一个表,其中包含不同的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控件的信息……

点赞