在UWP项目中,如何针对DependencyProperty进行设计时绑定?

时间:2018-03-28 21:58:13

标签: xaml binding uwp

我正在寻找一种方法来使用XAML Binding,它不仅可以绑定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; }
}

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

    <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 viewmodel对象,还可以为Image提供设计时视图或至少后备值?

谢谢,  瑞克

1 个答案:

答案 0 :(得分:0)

  

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

您似乎无法访问XAML中的Item viewmodel对象,并且还为此方案中的Image提供了设计时视图或至少后备值。

默认情况下,

{Binding}会假定您已绑定到标记页的 DataContext DataContext 属性,其类型为Object,并且在运行时也可能会更改。当您使用{Binding}时,在设计时,Visual Studio无法识别DataModel类型,因此您无法找到&#34; Item&#34;和它在xaml上的属性。另一方面,FallbackValue属性用于获取或设置当绑定无法返回值时使用的值,如果绑定路径正确并返回值, FallbackValue 不会显示。您可以尝试重建项目并提供错误的路径以查看FallbackValue。

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

更多详情,请参阅{Binding} markup extension{x:Bind} markup extension