使用Prism ViewModel和接口的UWP绑定停止工作

时间:2018-10-06 11:50:15

标签: c# xaml uwp prism

一切正常。当我单击按钮时,边框元素的可见性被切换。

在我的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;

该应用程序正在运行,但是可见性绑定停止工作,我不知道为什么。

1 个答案:

答案 0 :(得分:2)

已编译的{x:Bind}检查绑定的类型是否为INotifyPropertyChanged,以便它可以连接用于数据绑定的NotifyPropertyChanged事件。但是,由于x:Bind是在编译时求值的,所以不能这样做,因为ITest并非源自INotifyPropertyChanged

要解决此问题,您需要确保ITest扩展INotifyPropertyChanged

interface ITest : INotifyPropertyChanged
{
    ... 
}