【问题标题】:How to supply a design time value for silverlight textblock that is bound to viewmodel property?如何为绑定到 viewmodel 属性的 silverlight 文本块提供设计时间值?
【发布时间】:2011-08-10 11:05:22
【问题描述】:

我的 XAML 中有一个 TextBlock,它的文本绑定到我的视图模型中的一个属性。

<TextBlock x:Name="SomeText" Text="{Binding TheTextProperty}" />

这很好用,但在设计时,没有视图模型,因此属性无法解析并且文本为空白。这在设计器中很难使用,因为它没有显示可见的文本。

如何指定一些在设计时使用的默认文本?

【问题讨论】:

    标签: silverlight data-binding mvvm textblock


    【解决方案1】:

    也许你可以试试

    <TextBlock x:Name="SomeText" Text="{Binding TheTextProperty, FallbackValue='Some other text'}" />
    

    作为documented here

    【讨论】:

    • 正是我想要的。谢谢!
    • 这里的风险是,如果由于某种原因您的属性为 Null,则备用值也将在运行时显示。根据您的情况,这可能不太理想。
    • @Mike:我也是第一次想到这个,但是MSDN说绑定无法返回值时使用的值。我也试过了,用@绑定值的 987654323@ 不会导致显示 FallbackValue(可以使用 TargetNullValue 指定 null-fallback)
    【解决方案2】:

    您还可以使用Design Time Data 在您的解决方案中提供丰富的绑定体验。设置和运行有点困难,但这是要点。

    首先,您在 xaml 中创建 DataContext。将一个新的 Xml 文档添加到您的解决方案(根是一个好地方),并给它一个 .xaml 扩展名。在本例中,我们将此文件称为“foo.xaml”。

    在此文件中,删除所有 XML 并开始创建 DataContext 类型的实例。例如,如果您的 DataContext 是一个字符串(非常简单的示例),您的文件将如下所示:

    <string xmlns="clr-namespace:System;assembly=mscorlib">LOL!</string>
    

    你可能有你的样子

    <ViewModel xmlns="clr-namespace:MyNamespace">
        <ViewModel.MyObservableCollection>
             <MyModel Name="foo" />
             <!-- etc -->
    

    将此文件的构建操作设置为 DesignDataWithDesignTimeCreatableTypes:

    接下来,在您的视图中,将以下命名空间和属性添加到您的 Window/UserControl 的根目录:

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DataContext="{d:DesignData Source=foo.xaml}"
    

    Source 相对于当前文档。所以,如果你的解决方案看起来像

    • 查看次数
      • MyUserControl.xaml
    • 数据
      • foo.xaml

    您可以将Source 设置为../Data/foo.xaml

    还有其他方法可以创建 DesignData 上下文,具体取决于您的 ViewModel 是否可以在设计时实例化等。

    【讨论】:

    • 这也是一个非常有趣的方法。看起来对于复杂的设计时数据非常有用。绝对值得收藏!
    【解决方案3】:

    另一种选择是使用DesignerProperties.GetIsInDesignMode 函数来确定控件是否托管在 VS/Blend 中,并在这种情况下生成假 DataContext。 Laurent Bugnion 在this post中提供了一些关于如何创建和使用设计时数据的示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 2012-07-11
      • 2011-01-19
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2010-11-14
      • 2013-12-05
      相关资源
      最近更新 更多