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

时间:2018-11-14 15:50:47

标签: xaml xamarin.forms binding

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

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

Any Ideas如何以一种干净的方式解决这个问题?也许可以通过子类化Label来实现,但是如何呢?

1 个答案:

答案 0 :(得分:4)

在这种情况下,与IValueConverter相比,我更喜欢使用Trigger。因为使用触发器,您可以在视图内部包含文本。所以如果你想改变您不必去寻找该标签之外的逻辑。

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

因此,此处将触发器与VM中的Boolean属性绑定。如果无论何时更改为True或False,都会触发该触发器。

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

希望这会有所帮助。让我知道是否需要更多帮助。