Binding 和 x:Bind 中的FallbackValue不同。
在 Binding 中,FallbackValue 是绑定无法返回值时使用的值。
对于 Path 根本不在数据源上评估的情况,或者如果尝试使用双向绑定在源上设置它会引发数据绑定引擎捕获的异常,则绑定使用 FallbackValue。如果源值是依赖属性标记值,则也使用 FallbackValue DependencyProperty.UnsetValue
。
但是在 x:Bind 中,FallbackValue 指定了在源或路径无法解析时显示的值。它不能与 DependencyProperty.UnsetValue 一起使用。
对于您的场景,您可以使用 Converter 进行操作DependencyProperty.UnsetValue
,就像以下代码一样。
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
object res;
res = (value == null ? false : true) ? string.IsNullOrEmpty(value.ToString()) ? null : new BitmapImage(new Uri(value.ToString())) : null;
return res;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Xaml 文件中的用法
<Page.Resources>
<local:ImageConverter x:Key="cm" />
</Page.Resources>
<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView x:Name="MyListView" ItemsSource="{x:Bind Items}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:HeadPhoto">
<Ellipse Width="40" Height="40">
<Ellipse.Fill>
<ImageBrush ImageSource="{x:Bind PicUri,TargetNullValue=/Assets/pic.png,Converter={StaticResource cm }}" />
</Ellipse.Fill>
</Ellipse>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</Page>
占位符图像效果。