WPF如何处理绑定到null对象的属性?

use*_*768 15 wpf null xaml multithreading properties

我有一个使用itemTemplate的listBox,其中包含以下行:

<Image Source="{Binding MyProperty.PossiblyNullObject.UrlProperty}"/> 
Run Code Online (Sandbox Code Playgroud)

绑定到此listBox是一个模型视图集合,它在单独的线程上加载集合中项目的组件.当组合引擎首次呈现xaml代码时,可能不会将'PossiblyNullObject'设置为值.

WPF如何处理这个?它是否使用默认值(没有图像源,因此没有图像)并继续?它等了吗?它是否会自动检测值何时初始化并使用新源重新呈现?它是如何以与我以编程方式调用'MyProperty.PossiblyNullObject.UrlProperty'相同的方式抛出对象空异常?当我尝试调用它时,如何在我自己的代码中重现此功能?

谢谢你的任何建议.我对WPF很尴尬,我正试图解决一个问题.图像加载是一个性能问题所以我找到了一个解决方案来加载,解码,然后冻结后台线程上的图像源,这样它就不会锁定UI.不幸的是,当我尝试使用调用相同属性的解决方案替换图像源绑定时,我遇到了这个空异常问题.WPF以某种方式处理可能的null对象,我想以同样的方式来保持清洁.

Ana*_*aev 23

BindingBase具有两个属性:TargetNullValueFallbackValue.

TargetNullValue当source的值为null时返回值.

FallbackValue 绑定无法返回值时返回值.

使用示例:

<!-- xmlns:sys="clr-namespace:System;assembly=mscorlib" -->

<Window.Resources>
    <!-- Test data -->
    <local:TestDataForImage x:Key="MyTestData" />

    <!-- Image for FallbackValue -->
    <sys:String x:Key="ErrorImage">pack://application:,,,/NotFound.png</sys:String>

    <!-- Image for NULL value -->
    <sys:String x:Key="NullImage">pack://application:,,,/NullImage.png</sys:String>
</Window.Resources>

<Grid DataContext="{StaticResource MyTestData}">
    <Image Name="ImageNull"
           Width="100" 
           Height="100"
           Source="{Binding Path=NullString, TargetNullValue={StaticResource NullImage}}" />

    <Image Name="ImageNotFound"
           Width="100" 
           Height="100" 
           Source="{Binding Path=NotFoundString, FallbackValue={StaticResource ErrorImage}}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此链接:

BindingBase.TargetNullValue属性

BindingBase.FallbackValue属性

  • 如果没有设置这些属性,会发生什么情况?会返回null值吗?还是后台有异常?我希望得到有关此主题的更新答案。谢谢! (3认同)
  • 我正在寻找像XAML的Null Propagation这样的机制(如在C#6.0中),但很难找到如何清楚地表达问题以便找到它.值得注意的是,如果使用'FallBackValue',转换器将不会执行. (2认同)