【问题标题】:Silverlight 4 + Prism create controls at runtimeSilverlight 4 + Prism 在运行时创建控件
【发布时间】:2011-02-19 09:44:22
【问题描述】:

我正在创建一个 Silverlight 4 应用程序来管理活动目录对象(CRUD 用户、组等)。现在我们都知道活动目录对象有很多属性。 我想为某些 AD 对象类型(用户、组等)在 SQL DB(即 samaccountname、mail 等)中保存一些属性名称组。 当 silverlight 应用程序中的用户单击“创建用户”时,我想

  1. 获取我在 sql db 中为用户定义的所有属性名称
  2. 为每个属性创建一个预定义的 Silverlight 控件并将其添加到当前的“创建视图”中
  3. 能够读取用户在控件中输入的所有值并将其传递出去

用户控件根据 Active Directory 属性的类型而有所不同,即对于具有日期时间值的属性,我们将创建一个带有日历的用户控件。这样我们就可以保持“创建”视图的动态。

Silverlight / Prism 基础已经存在,我正在通过 RegionManager 添加我的视图。这一切都很好,但我不确定如何以动态方式添加控件,使其仍然适用于 PRISM 和 MVVM 模式。感谢您的任何意见。

【问题讨论】:

    标签: silverlight mvvm user-controls prism


    【解决方案1】:

    我将假设您对从数据库获取属性并将值保存回来并专注于使用 MVVM 创建视图的中间区域感到满意。

    我不会担心 PRISM 部分。你说你已经向区域经理注册了视图,这就是你需要做的所有事情。

    我最初的想法是如何在考虑到 MVVM 的情况下在运行时“创建”控件。创建控件不是困难的部分,但需要处理您将注入这些控件的元素,例如根网格。从表面上看,这会让人感觉非常不符合 MVVM。就我个人而言,我认为以旧方式完成“查看”代码是有效的,绑定中使用的“数据”代码应该是 MVVM 的。问题是告诉代码将控件注入到视图中实际注入的内容。我想不出一个巧妙的方法来做到这一点。

    作为一种解决方案,您能否创建一个包含适用于每个属性的所有控件的视图,而不是在需要时“创建”它们“在不需要时隐藏”它们?您可以将“可见性”属性(可能通过值转换器)绑定到 ViewModel 中的一个属性,该属性可用于确定是否应显示该特定控件。如果这些放置在堆栈面板中,则视图将动态缩小。

    如果您认为代码示例对我有帮助,请告诉我。

    【讨论】:

    • 是否可以在用户控件中定义额外的 PRISM 区域并用属性控件再次填充这些区域?
    • 理论上我猜如果你使用视图注入技术并适当地设置数据上下文是可能的。我个人只使用了视图发现,因此无法评论有效性。如果你弄明白了,请告诉我们。干杯。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多