wpf - WPF 如何处理对空对象属性的绑定(bind)?

标签 wpf multithreading xaml properties null

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

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

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

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

感谢您的任何建议。我对 WPF 来说是个令人尴尬的新手,我正试图解决我无法解决的问题。图像加载是一个性能问题,所以我找到了一个解决方案来加载、解码,然后在后台线程上卡住图像源,这样它就不会锁定 UI。不幸的是,当我尝试用调用相同属性的解决方案替换图像源绑定(bind)时遇到了这个空异常问题。 WPF 以某种方式处理可能的空对象,我想以同样的方式来保持事情的清洁。

最佳答案

BindingBase有两个属性:TargetNullValueFallbackValue .
TargetNullValue当源的值为空时返回您的值。
FallbackValue当绑定(bind)无法返回值时返回您的值。

使用示例:

<!-- 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>

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

BindingBase.TargetNullValue Property

BindingBase.FallbackValue Property

关于wpf - WPF 如何处理对空对象属性的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066931/

相关文章:

c# - 如何为 WPF 创建 INavigationService。使用从 XML 加载的自定义窗口进行导航

java - JUnit、测试和线程

android - 只有创建 View 层次结构的原始线程才能触摸其 View 。安卓

TreeViewItem 元素中的 C# 选项卡索引

c# - 如何在运行时更改数据模板?

wpf - 与MVVM模式很好集成的WPF报告控件?

c# - 在 WPF MVVM 中,我是否有必要将所有要从模型绑定(bind)的属性包装为依赖属性?

multithreading - Clojure并行计算数组

c# - Image.FromFile 未加载到设计时 View 中 c#.net

wpf - 与 WPF 中的数学运算绑定(bind)