WPF如何处理与空对象属性的绑定?

WPF如何处理与空对象属性的绑定?,wpf,multithreading,xaml,properties,null,Wpf,Multithreading,Xaml,Properties,Null,我有一个使用itemTemplate的列表框,其中包含以下行: <Image Source="{Binding MyProperty.PossiblyNullObject.UrlProperty}"/> 绑定到此列表框的是一个模型视图集合,它在单独的线程上加载集合中项的组件。合成引擎首次呈现xaml代码时,“PossiblyNullObject”可能未设置为值 WPF如何处理这个问题?它是否使用默认值(没有图像源,所以没有图像)并继续?等一下吗?它是否自动检测值何时初始化并使

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

<Image Source="{Binding MyProperty.PossiblyNullObject.UrlProperty}"/> 

绑定到此列表框的是一个模型视图集合,它在单独的线程上加载集合中项的组件。合成引擎首次呈现xaml代码时,“PossiblyNullObject”可能未设置为值

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


谢谢你的建议。我是WPF的新手,我正试图解决一个超出我能力范围的问题。图像加载是一个性能问题,所以我找到了一个解决方案来加载、解码,然后在后台线程上冻结图像源,这样就不会锁定UI。不幸的是,当我尝试用调用相同属性的解决方案替换映像源绑定时,遇到了这个空异常问题。WPF以某种方式处理可能的空对象,我希望以同样的方式保持干净。
BindingBase
中的有两个属性:
TargetNullValue
FallbackValue

TargetNullValue
在源的值为空时返回您的值

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>

pack://application:,,,/NotFound.png
pack://application:,,,/NullImage.png
有关更多信息,请参阅以下链接:


绑定中的

具有属性:和。当源的值为null时,第一个返回您的值。当绑定无法返回值时,第二个返回值。它适合你吗?谢谢你,安纳托利。这给了我足够的时间开始研究。你不介意,如果我写下这个作为答案,你接受了吗?谢谢。是的,我会接受这个答案。我在为XAML寻找一种类似Null传播的机制(如在C#6.0中),但很难找到如何表达问题的方法来找到这个问题。值得注意的是,如果使用“FallBackValue”,转换器将不会执行。如何在命令绑定中使用
FallBackValue
?以下内容似乎不起作用:
。如果
ActiveDrawing
为空,我希望该按钮被禁用。如果您想回答,我也发布了一条消息:>值得注意的是,如果使用“FallBackValue”,转换器将不会执行。谢谢,@Gui,这让我省去了一个巨大的头痛。我一直在争论是否必须重写整个可见性转换器。如果没有设置这些属性,会发生什么?是否返回空值?还是背景中的例外?如果您能回答这个问题,我将不胜感激。谢谢