转换绑定值

否定值

您经常需要对绑定的值取反。常见的用法有显示/隐藏控件或启用/禁用控件。您可以通过在绑定值前面加上运算符!来取反。

例如,您可能希望在禁用一个控件时显示另一个控件。

<StackPanel>
  <TextBox Name="input" IsEnabled="{Binding AllowInput}"/>
  <TextBlock IsVisible="{Binding !AllowInput}">Sorry, no can do!</TextBlock>
</StackPanel>

当绑定到非布尔值时,取反也有效。首先,使用Convert.ToBoolean将值转换为布尔值,并对结果取反。由于整数值0被视为false,而所有其他整数值都被视为true,因此当集合为空时,可以使用此方式显示消息:

<Panel>
  <ListBox Items="{Binding Items}"/>
  <TextBlock IsVisible="{Binding !Items.Count}">No results found</TextBlock>
</Panel>

双感叹号可用于将非布尔值转换为布尔值。例如,要在集合为空时隐藏控件:

<Panel>
  <ListBox Items="{Binding Items}" IsVisible="{Binding !!Items.Count}"/>
</Panel>

绑定转换器

对于更高级的转换,和其他XAML框架一样,Avalonia支持IValueConverter

注意:IValueConverter接口在.NET标准2.0中不可用,因此我们在Avalonia.Data.Converters命名空间中提供了自己的接口。

用法与其他XAML框架相同:

内置转换器

Avalonia为常见场景提供了许多内置值转换器:

转换器
描述

StringConverters.IsNullOrEmpty

如果输入的字符串为null或empty,则返回true

StringConverters.IsNotNullOrEmpty

如果输入的字符串不为null或empty,则返回true

ObjectConverters.IsNull

如果输入为null,则返回true

ObjectConverters.IsNotNull

如果输入为null,则返回false

BoolConverters.And

一种多值转换器,如果所有输入均为true,则返回true

BoolConverters.Or

一种多值转换器,如果其中任意输入为true,则返回true

您可以在此处查看默认转换器列表: Avalonia.Data.Converters 命名空间.

示例

如果绑定文本为null或empty,则隐藏TextBlock

如果绑定内容为null或empty,则隐藏ContentControl

从现在开始,假设转换器已导入,如上一节“绑定转换器”所示

根据不同参数将文本转换为特定大小写格式

在上下文中将绑定对象转换为不同的目标类型

范例

ValueConverter Sample

最后更新于

这有帮助吗?