一切正常。当我单击按钮时,边框元素的可见性被切换。
在我的XAML代码后面:
Test2ViewModel ViewModel => DataContext as Test2ViewModel;
public Test2Page()
{
this.InitializeComponent();
}
我的ViewModel为:
public class Test2ViewModel : ViewModelBase,ITest
{
private bool _borderIsVisible;
public bool borderIsVisible
{
get => _borderIsVisible;
set { SetProperty(ref _borderIsVisible, value); }
}
public Test2ViewModel()
{
borderIsVisible = true;
}
public void ToggleVisibility()
{
if (borderIsVisible)
{
borderIsVisible = false;
}
else
{
borderIsVisible = true;
}
}
我的XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="200" />
</Grid.RowDefinitions>
<Button
Grid.Row="0"
HorizontalAlignment="Center"
Click="{x:Bind ViewModel.ToggleVisibility}"
Content="Click Me" />
<Border
Grid.Row="1"
Width="250"
Background="AliceBlue"
BorderBrush="Blue"
BorderThickness="4"
Visibility="{x:Bind ViewModel.borderIsVisible, Mode=OneWay}" />
</Grid>
当我尝试实现这样的接口时,它将停止工作:
ITest ViewModel => DataContext as Test2ViewModel;
该应用程序正在运行,但是可见性绑定停止工作,我不知道为什么。
答案 0 :(得分:2)
已编译的{x:Bind}
检查绑定的类型是否为INotifyPropertyChanged
,以便它可以连接用于数据绑定的NotifyPropertyChanged
事件。但是,由于x:Bind
是在编译时求值的,所以不能这样做,因为ITest
并非源自INotifyPropertyChanged
。
要解决此问题,您需要确保ITest
扩展INotifyPropertyChanged
:
interface ITest : INotifyPropertyChanged
{
...
}