【问题标题】:In a UWP project how can I have design-time binding against a DependencyProperty?在 UWP 项目中,如何对 DependencyProperty 进行设计时绑定?
【发布时间】:2018-09-07 17:57:06
【问题描述】:

我正在寻找一种使用 XAML 绑定的方法,它不仅可以绑定到 DependencyProperty,还可以提供设计时视图。

我在后面的代码中有一个 viewmodel 对象的依赖属性:

private static DependencyProperty s_itemProperty
    = DependencyProperty.Register("Item", typeof(BadgeItemViewModel), typeof(DetailPage), new PropertyMetadata(null));

public static DependencyProperty ItemProperty
{
    get { return s_itemProperty; }
}

在此示例中,绑定没有找到“项目”,但会给我一个后备设计时视图:

    <Grid Width="100" Margin="5,20,4,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Ellipse x:Name="elipAvatar" HorizontalAlignment="Center" Height="100" Width="100" VerticalAlignment="Center">
            <Ellipse.Fill>
                <ImageBrush ImageSource="{Binding Item.media.badge_image_lg, FallbackValue='https://untappd.akamaized.net/badges/bdg_StPatirkcs2018_lg.jpg'}" Stretch="UniformToFill"/>
            </Ellipse.Fill>
        </Ellipse>
    </Grid>

在此示例中,使用 x:Bind 的运行时绑定效果很好,我可以在我的 XAML 中获得对“Item”对象的 Intellisense 访问权限,但我没有获得回退类型值并且 x:Bind 通常不支持设计时数据:

    <Grid Width="100" Margin="5,20,4,0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <Ellipse x:Name="elipAvatar" HorizontalAlignment="Center" Height="100" Width="100" VerticalAlignment="Center">
            <Ellipse.Fill>
                <ImageBrush ImageSource="{x:Bind Item.media.badge_image_lg, TargetNullValue='https://untappd.akamaized.net/badges/bdg_StPatirkcs2018_lg.jpg'}" Stretch="UniformToFill"/>
            </Ellipse.Fill>
        </Ellipse>
    </Grid>

是否有可能达成妥协,让我不仅可以访问 XAML 中的 Item 视图模型对象,还可以提供设计时视图或至少为 Image 提供后备值?

谢谢, 瑞克

【问题讨论】:

    标签: xaml binding uwp


    【解决方案1】:

    是否有可能达成妥协,让我不仅可以访问 XAML 中的 Item viewmodel 对象,还可以提供设计时视图或至少为 Image 提供后备值?

    您似乎无法在 XAML 中访问 Item viewmodel 对象,也无法在此场景中为 Image 提供设计时视图或至少一个后备值。

    {Binding} 默认情况下假定您绑定到标记页的 DataContextDataContext 属性是 Object 类型,在运行时也会发生变化。当您使用 {Binding} 时,在设计时,Visual Studio 无法识别 DataModel 类型,因此您无法在 xaml 上找到“Item”及其属性。另一方面,FallbackValue 属性用于在绑定无法返回值时获取或设置要使用的值,如果您的绑定路径正确并返回值,则 FallbackValue 不会展示。您可以尝试重新构建您的项目并提供错误的路径来查看 FallbackValue。

    {x:Bind} 不使用 DataContext 作为默认源,而是使用页面或用户控件本身。因此,它将在您的页面或用户控件的代码隐藏中查找属性、字段和方法。如果Item 对象在你的代码后面,你可以访问它和它的属性。但是源 uri 在 ViewModel 代码中,Visual Studio 仍然无法获取资源。同时{x:Bind} markup extension中也引入了TargetNullValueFallbackValue,大​​家可以看看。

    更多详情,请查看{Binding} markup extension{x:Bind} markup extension

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2019-02-26
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      相关资源
      最近更新 更多