进度栏的可见性属性在运行时不会更改

时间:2019-03-26 12:28:28

标签: c# wpf dependency-properties

我希望能够在按下按钮后隐藏进度条,但似乎不起作用。

这是我在XAML中的进度栏​​:

[InstallDir]/cplex/include/ilcplex/solution.xsd

在我的.xaml.cs中,我具有以下依赖项属性:

<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"/>

在视图模型中,我具有此属性:

    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");
        }
    }

调试时:

  • 上面的行被执行了,但是什么也没发生。

  • setter被调用,OnPropertyChanged也被调用

  • 依赖项属性已注册。

我不确定自己做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

根据您的问题,我认为这里有两个问题:

  1. DataContext的{​​{1}}设置为您的视图模型,但是您的ProgressBar仅更新父控件/窗口的属性。
  2. Button中的DataContext设置为您的父控件/窗口,但是您的ProgressBar仅更新了视图模型的属性。

如果您希望Button公开可用,请将其更改为

ProgressVisibility

如果public Visibility ProgressVisibility { get => this.viewModel.ProgressVisibility; set => this.viewModel.ProgressVisibility = value; } 不需要公开,只需删除依赖项属性,然后在视图模型中使用实现即可。