【问题标题】:Silverlight DataBinding Against CLR Objects in Blend在 Blend 中针对 CLR 对象的 Silverlight 数据绑定
【发布时间】:2010-10-23 23:19:38
【问题描述】:

我喜欢 Blend 中的功能,您可以在其中设置与 CLR 对象的数据绑定,并设计您的 Silverlight 控件/页面。我的问题是围绕创建将用作 DataTemplate 的用户控件。这一切都在 Blend 中运行良好,但仅限于设计时。问题是,当我在 Blend 中编辑控件并将文本框绑定到 CLR 对象的属性时,它给了我这个:

Text="{Binding Mode=OneWay, Path=TestAccount.Name, Source={StaticResource TestDataDS}}"

但是当我准备好运行应用程序并在 DataTemplate 中使用该用户控件来表示列表框时,我需要它看起来像这样:

Text="{Binding Mode=OneWay, Path=Name}"

如何在 Belnd 中使用漂亮的绑定进行设计,而在准备运行项目时不必触摸/搜索和替换所有这些绑定?我正在寻找一种既适用于设计时又适用于运行时的方法。

谢谢,

【问题讨论】:

    标签: silverlight data-binding datatemplate blend


    【解决方案1】:

    为了在 Expression Blend 中创建与 CLR 对象的数据绑定,您无需使用“创建数据绑定”对话框的“数据字段”选项卡。事实上,这样做是非常罕见的。

    使用自定义路径表达式是最常见的方式。只需选中“使用自定义路径表达式”复选框,然后输入您要绑定到的属性的名称。如果您未指定数据上下文,则数据绑定将解析为您在恰好是 DataContext 的任何对象上指定的路径。

    如果您想设置设计时 DataContext,您可以通过设置 d:DataContext 属性来实现,确保正确定义 xmlns:d="..."

    【讨论】:

    • 我想我没有关注你。我创建了一个名为 TestData 的简单类,我用它来从我的项目中返回水合对象。例如,一个带有 name 属性的帐户对象。因此,在我上面粘贴的代码中,当您在 Expression Blend 中时,您会看到实时,并且您将 TextBlock 文本属性绑定到 Path={MyObject}.{Property},Blend 进入对象并从该水合中获取值目的。因此,当您查看设计器时,您会看到其中包含文本的文本块。这使您可以使用布局来查看控件的外观。但是绑定语法只有好的...
    • 当你在 blend 里面的时候。当我在运行时,绑定不再有效,因为我不希望它直接绑定到测试对象,我希望它绑定到 DataContext 中的对象。所以第一个代码 sn-p 在 Blend 中工作,但第二个代码 sn-p 在运行时工作。我所希望的是一个能够同时满足我的解决方案。
    • 现在我明白了,您需要 DesignTime 绑定和运行时绑定,而不仅仅是如何从 blend 中设置在运行时有效的绑定。
    • 没错!我可能很懒惰,但在设计时在 Blend 中拥有数据确实很好(想想数据模板),而不必在运行时更改代码。
    【解决方案2】:

    如果您使用的是 blend 2,我建议您查看使用依赖注入的 Jonas Follesoe's design time / run time blog post

    如果你有幸使用 Blend 3,那么check this out

    当您在 blend 中设置绑定时,“显式数据上下文”选项卡是否可用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多