在silverlight中是否存在类似占位符的控件? 如果我在视图模型中有一个动态创建的控件,我如何将它绑定到Xaml中的某个元素? 这是实现这一目标的正确方法:
<ContentControl Content="{Binding MyControl}"></ContentControl>
答案 0 :(得分:2)
不要动态创建实际控件。将您需要的所有内容放在视图模型的属性中,并将UI绑定到这些属性。当然,您还需要将控件的DataContext设置为视图模型。有关详细信息,请参阅this overview。
要回答更多问题,请将ContentControl的内容绑定到ViewModel中的属性。该属性可以是任何类型!然后在XAML中声明一个DataTemplate用于显示该属性;这将代表用于装饰该财产后的“皮肤”。将DataTemplate设置为ContentControl的ContentTemplate(或作为该类型的默认值......等)。 DataTemplate可以包含其他控件,其他绑定,任何东西。这至少是一种方式,有很多。你必须提出更具体的内容或开始阅读基础知识。
答案 1 :(得分:1)
您可以根据您要显示的对象类型,使用适当的子控件填充占位符。例如,您可以绑定到viewmodel中类型为Foo
的属性,然后视图会自动选择FooView
控件来显示该属性。请参阅此other question以及链接文章中有关其工作原理的示例代码 - 它涉及数据模板。确保你先了解这些东西。
从other question我知道您实际上是在尝试使用MEF添加视图。实质上,您正在尝试使用MEF插件添加数据模板。这是一个更高级的用例,是this question的主题。该问题的答案解释了如何动态合并插件提供的资源字典(包含数据模板信息)。