【发布时间】:2017-07-24 10:55:36
【问题描述】:
我们有一个使用 Template10 的 UWP 应用。有一个显示折扣的文本块和文本框。当ViewModel.Discount 为空时,我们希望隐藏文本块。
在 App.xaml 中我们定义了一个转换器
<T10Converters:ValueWhenConverter x:Key="HideWhenNullConverter" When="{x:Null}">
<T10Converters:ValueWhenConverter.Value>
<Visibility>Collapsed</Visibility>
</T10Converters:ValueWhenConverter.Value>
<T10Converters:ValueWhenConverter.Otherwise>
<Visibility>Visible</Visibility>
</T10Converters:ValueWhenConverter.Otherwise>
</T10Converters:ValueWhenConverter>
在 View 中我们设置 TextBlock 的可见性
Visibility="{x:Bind ViewModel.Discount, Converter={StaticResource HideWhenNullConverter}}"
在 ViewModel 中:
public class ViewModel : ViewModelBase
{
decimal? _Discount = default(decimal?);
public decimal? Discount
{
get
{
return _Discount;
}
set
{
if (value == 0) value = null;
Set(ref _Discount, value);
}
}
然而,即使ViewModel.Discount 的值为空,文本块也始终可见。 ViewModel.Discount 为空时如何隐藏文本块
【问题讨论】:
-
您还可以声明可见性逻辑是 ViewModel 的责任。最新的 UWP 可以直接将 Visibility 绑定到布尔值。想象一下,您以后有额外的业务规则,例如最高价格左右。
-
@HenkHolterman 很好,感谢您提到这一点 - 我不知何故 missed this。
-
在 14393,
Visibility="{x:Bind ViewModel.Discount.HasValue, Mode=OneWay}". -
实际上,如果您使用 14393,您应该避免使用转换器,因为它们很慢。相反,您可以直接绑定一个函数。
-
是的@Justin XL 这就是我们发现的......转换器非常慢。感谢您的提示!
标签: xaml uwp template10