UWP Использование Prism ViewModel и интерфейсов Привязка перестает работать - PullRequest
0 голосов
/ 06 октября 2018

Это все работает хорошо.Когда я нажимаю кнопку, видимость элементов границы переключается.

В моем коде 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 голосов
/ 06 октября 2018

Скомпилированный {x:Bind} проверяет, является ли связанный тип INotifyPropertyChanged, чтобы он мог подключить событие NotifyPropertyChanged, используемое для привязки данных.Однако, поскольку x:Bind вычисляется во время компиляции, он не может этого сделать, поскольку ITest не является производным от INotifyPropertyChanged.

Чтобы исправить это, вам нужно убедиться, что ITest расширяетINotifyPropertyChanged:

interface ITest : INotifyPropertyChanged
{
    ... 
}
...