为什么 bool 在使用传统绑定时无需转换器就可以实现可见性
Why does bool work for visibility without a converter when using traditional binding
我之前和前几天创建并使用了 bool 到可见性转换器,但我忘记在绑定上使用转换器(我使用的是传统绑定)。我将视图中控件的可见性 属性 绑定到视图模型中的 bool 属性 并且令人惊讶的是它有效。所以我的问题是如果它适用于传统绑定,为什么我们需要使用转换器?因为看起来编译器正在为我进行转换。
我在 Visual studio Update 3 中的 UWP 应用程序上对其进行了测试。
最低应用目标为 10.0.10586
目标版本为 10.0.14393
有意思。这一直是一个痛苦,似乎没有太多宣传就已经解决了,我不知道这一点。
在 WPF 中,您总是必须使用 ValueConverter,因为 Visibility 不是布尔值。
我刚刚从项目中的 {x:Bind ...}
中删除了 BooleanToVisibility 转换,它确实仍然有效。我从生成的代码中挖出了这个:
private void Update_ViewModel_ShowMessage(global::System.Boolean obj, int phase)
{
...
this.Update_ViewModel_ShowMessage_Cast_ShowMessage_To_Visibility(
obj ? global::Windows.UI.Xaml.Visibility.Visible
: global::Windows.UI.Xaml.Visibility.Collapsed
, phase);
...
}
显然它现在是内置的。
更新:
对于 {x:Bind }
已宣布 here,作为周年纪念更新的一部分。而且您确实需要以 14393 或更高版本为目标。对于旧版本,它仅适用于 {Binding ...}
。
我之前和前几天创建并使用了 bool 到可见性转换器,但我忘记在绑定上使用转换器(我使用的是传统绑定)。我将视图中控件的可见性 属性 绑定到视图模型中的 bool 属性 并且令人惊讶的是它有效。所以我的问题是如果它适用于传统绑定,为什么我们需要使用转换器?因为看起来编译器正在为我进行转换。
我在 Visual studio Update 3 中的 UWP 应用程序上对其进行了测试。 最低应用目标为 10.0.10586 目标版本为 10.0.14393
有意思。这一直是一个痛苦,似乎没有太多宣传就已经解决了,我不知道这一点。
在 WPF 中,您总是必须使用 ValueConverter,因为 Visibility 不是布尔值。
我刚刚从项目中的 {x:Bind ...}
中删除了 BooleanToVisibility 转换,它确实仍然有效。我从生成的代码中挖出了这个:
private void Update_ViewModel_ShowMessage(global::System.Boolean obj, int phase)
{
...
this.Update_ViewModel_ShowMessage_Cast_ShowMessage_To_Visibility(
obj ? global::Windows.UI.Xaml.Visibility.Visible
: global::Windows.UI.Xaml.Visibility.Collapsed
, phase);
...
}
显然它现在是内置的。
更新:
对于 {x:Bind }
已宣布 here,作为周年纪念更新的一部分。而且您确实需要以 14393 或更高版本为目标。对于旧版本,它仅适用于 {Binding ...}
。