使用 x:Bind 更改可见性而不使用 MVVM 更新
Changing Visibility with x:Bind not updating with MVVM
自周年更新(内部版本 14383 / 14393)以来,您应该能够 toggle the visibility of XAML elements 无需使用转换器,如下所示:
<TextBlock Text="I'm not visible!" Visibility="{x:Bind IsVisibleFalse}" />
<TextBlock Text="I'm visible!" Visibility="{x:Bind IsVisibleTrue}" />
我在我的项目中尝试过,最低目标版本设置为 Windows 10 周年纪念版。不幸的是我没有让它工作。
此代码工作正常:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked,
Converter={StaticResource BoolToVisibilityConverter}, Mode=TwoWay}">
这个没有(编译时没有错误,只是在 bool 值更改时不显示):
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked}>
我怀疑 Mode="TwoWay" 是问题所在,因为您无法设置它 "when the binding expression ends with a cast"。此代码也不起作用:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked,
Converter={StaticResource BoolToVisibilityConverter}>
所以我的问题是:我是不是遗漏了什么,或者这在 MVVM 场景中还没有工作并且只有代码隐藏?
原来 x:Bind 默认为 Mode=OneTime
- 我误以为是 Mode=OneWay
。
所以这确实有效:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked, Mode=OneWay}>
默认 Mode
是 OneTime
,这会导致您的代码无法运行。我建议你使用 OneWay
,它应该可以在铸造时使用。
自周年更新(内部版本 14383 / 14393)以来,您应该能够 toggle the visibility of XAML elements 无需使用转换器,如下所示:
<TextBlock Text="I'm not visible!" Visibility="{x:Bind IsVisibleFalse}" /> <TextBlock Text="I'm visible!" Visibility="{x:Bind IsVisibleTrue}" />
我在我的项目中尝试过,最低目标版本设置为 Windows 10 周年纪念版。不幸的是我没有让它工作。
此代码工作正常:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked,
Converter={StaticResource BoolToVisibilityConverter}, Mode=TwoWay}">
这个没有(编译时没有错误,只是在 bool 值更改时不显示):
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked}>
我怀疑 Mode="TwoWay" 是问题所在,因为您无法设置它 "when the binding expression ends with a cast"。此代码也不起作用:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked,
Converter={StaticResource BoolToVisibilityConverter}>
所以我的问题是:我是不是遗漏了什么,或者这在 MVVM 场景中还没有工作并且只有代码隐藏?
原来 x:Bind 默认为 Mode=OneTime
- 我误以为是 Mode=OneWay
。
所以这确实有效:
<StackPanel Visibility="{x:Bind ViewModel.IsUnlocked, Mode=OneWay}>
默认 Mode
是 OneTime
,这会导致您的代码无法运行。我建议你使用 OneWay
,它应该可以在铸造时使用。