Свойство индикатора выполнения не изменяется во время выполнения - PullRequest
2 голосов
/ 26 марта 2019

Я хочу иметь возможность скрыть индикатор выполнения после нажатия кнопки, но, похоже, она не работает.

Это мой индикатор в XAML:

<ProgressBar Grid.Row="1" Grid.Column="1" IsIndeterminate="True" Height="37" Margin="0,10,0,10" Visibility="{Binding ProgressVisibility,  Mode=TwoWay}" RenderTransformOrigin="0.5,0.5"/>

В моем .xaml.cs у меня есть это свойство зависимости:

    public Visibility ProgressVisibility
    {
        get { return (Visibility)GetValue(ProgressVisibilityProperty); }
        set { this.SetValue(ProgressVisibilityProperty, value); }
    }
    public static readonly DependencyProperty ProgressVisibilityProperty =
        DependencyProperty.Register("ProgressVisibility", typeof(Visibility), typeof(RecipeDownloadDialogStatusView), new PropertyMetadata(Visibility.Visible));

А в представлении модели у меня есть это свойство:

    private Visibility progressVisibility;
    public Visibility ProgressVisibility
    {
        get
        {
            return this.progressVisibility;
        }

        set
        {
            this.progressVisibility = value;
            this.OnPropertyChanged("ProgressVisibility");
        }
    }

Когда нажата кнопка, я звоню:

ProgressVisibility = Visibility.Hidden;

Во время отладки:

  • Строка выше выполняется, но ничего не происходит.

  • Вызывается установщик, как и OnPropertyChanged

  • Свойство зависимости регистрируется.

Я не совсем уверен, что я сделал не так. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 марта 2019

Основываясь на вашем вопросе, я думаю, что здесь есть одна из двух проблем:

  1. DataContext из ProgressBar установлено для вашей модели просмотра, но ваш Button только обновляет свойство вашего родительского элемента управления / окна.
  2. DataContext из ProgressBar установлено для вашего родительского элемента управления / окна, но ваш Button только обновляет свойство вашей viewmodel.

Если вы хотите, чтобы ProgressVisibility был общедоступным, измените его на

public Visibility ProgressVisibility
{
    get => this.viewModel.ProgressVisibility;
    set => this.viewModel.ProgressVisibility = value;
}

Если ProgressVisibility не обязательно должен быть публичным, просто удалите свойство зависимостей и вместо этого поработайте с реализацией в viewmodel.

...