根据布尔值更改 Xamarin 表单标签的文本

use*_*945 5 xaml binding xamarin.forms

我正在尝试有一个可以有两个不同文本值的标签。我将根据布尔值显示两者之一。我知道我可以创建一个绑定到我的视图模型,它可以有一个可以更改的属性(例如 LabelText)。但是,在这种情况下,我需要在视图模型中设置文本,这感觉有点混乱。

我正在寻找某种转换器 (IValueConverter),它在 text 属性上绑定一个 bool 并具有两个字符串参数。然后转换器为标签的文本选择正确的字符串。但是,据我所知,转换器上不可能有多个参数?

任何想法如何以干净的方式解决这个问题?也许以某种方式通过子类化标签,但是如何?

Nir*_*edi 11

在这种情况下,我更喜欢触发器而不是 IValueConverter。因为使用触发器,您可以将 Text 放在视图本身中。所以如果你想改变;你不必去寻找标签之外的逻辑。

<Label Text="Hello World!">
            <Label.Triggers>
                    <DataTrigger TargetType="Label" Binding="{Binding IsActive}" Value="false">
                        <Setter Property="Text"  Value="Not Active" />
                    </DataTrigger>
                    <DataTrigger TargetType="Label" Binding="{Binding IsActive}" Value="true">
                        <Setter Property="Text"  Value="Active" />
                    </DataTrigger>
                </Label.Triggers>

</Label>
Run Code Online (Sandbox Code Playgroud)

因此,在这里您将触发器与 VM 中的布尔属性绑定。如果它的 True 或 False 每当它改变时就会触发那个触发器。

只是让你知道; 您甚至还可以更改其他属性!让我们说如果你也想改变颜色?因此,在这种情况下,这可能是比使用 ValueConverter 更好的解决方案。

希望这可以帮助。如果您需要更多帮助,请告诉我。