【问题标题】:Placeholder for a control in silverlightSilverlight 中控件的占位符
【发布时间】:2011-04-30 19:48:33
【问题描述】:

silverlight 中是否有类似于占位符的控件? 如果我的视图模型中有一个动态创建的控件,我如何将它绑定到 Xaml 中的某个元素? 这是实现这一目标的正确方法吗:

<ContentControl Content="{Binding MyControl}"></ContentControl>

【问题讨论】:

    标签: xaml mvvm silverlight-4.0 mvvm-light


    【解决方案1】:

    您可以有一个占位符,根据您要显示的对象类型填充适当的子控件。例如,您可以在视图模型中绑定到Foo 类型的属性,然后视图会自动选择FooView 控件来显示该属性。请参阅此other question 和链接文章中的示例代码,了解其工作原理 - 它涉及数据模板。确保您首先了解这些内容。

    从您的other question 我知道您实际上是在尝试使用 MEF 添加视图。本质上,您正在尝试使用 MEF 插件添加数据模板。这是一个更高级的用例,它是this question 的主题。该问题的答案解释了如何动态合并插件提供的资源字典(包含数据模板信息)。

    【讨论】:

      【解决方案2】:

      不要动态创建实际控件。将您需要的所有内容放在视图模型的属性中,并将 UI 绑定到这些属性。当然,您还需要将控件的 DataContext 设置为视图模型。详情请见this overview

      为了回答更多问题,请将 ContentControl 的内容绑定到 ViewModel 中的一个属性。该属性可以是 any 类型!然后在 XAML 中声明一个 DataTemplate 用于显示该属性;这将代表绑定后用于装饰该属性的“皮肤”。将 DataTemplate 设置为 ContentControl 的 ContentTemplate (或作为该类型的默认值......等)。 DataTemplate 可以包含其他控件、其他绑定、任何东西。这至少是一种的方法,有很多。您必须提出更具体的问题或开始阅读基础知识。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 2011-11-19
        • 1970-01-01
        • 2015-12-11
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        相关资源
        最近更新 更多