2013-02-21 89 views
0

在WPF应用程序中,我定义了一个进度条。WPF进度条启动后100%

<ProgressBar Minimum="0" Maximum="{Binding TotalItemCount}" Value="{Binding CurrentItemCount, UpdateSourceTrigger=PropertyChanged}" /> 

但是我有进度条被完全填充的问题,即100%后直接已经启动了应用程序虽然我最初设置的属性为下列值:

TotalItemCount = 0; 
CurrentItemCount = 0; 

只要我将TotalItemCount更改为1进度栏正确设置为0%。在我看来,控件将0从0解释为100%。

如何更正初始化进度条到0%?

+6

显然0的0为100%。为什么不将'TotalItemCount' = 1设置为初始值? – 2013-02-21 12:55:13

+4

我会争辩说,进度条不需要在这一点上可见,为什么不隐藏它直到你实际加载项目? – RobJohnson 2013-02-21 12:57:09

+0

'TotalItemCount'属性绑定到显示数字的另一个标签控件。如果我初始化为1,那么用户认为已经有一个项目,所以他没有加载任何数据。 – 2013-02-21 12:57:14

回答

0

我做了一些研究员propsed:进度条是隐藏的,只要因为计数器为0.

3
public int MaxCountForProgress 
{ 
    get 
    { 
    if (TotalItemCount == 0) 
     return int.MaxValue; 
    return TotalItemCount; 
    } 
} 

...

ProgressBar Minimum="0" Maximum="{Binding MaxCountForProgress}" Value="{Binding CurrentItemCount, UpdateSourceTrigger=PropertyChanged}" 
+0

如果用户想要显示进度条中的当前值和最大值,将会失败。 – 2013-02-21 13:20:03

+0

我upvoted这个答案,因为它对我来说似乎是合理的;-)然而,我会去隐藏进度栏,直到它真的需要。 – 2013-02-21 13:26:24

1

你可以写这样的进度最大值转换器:

[ValueConversion(typeof(double), typeof(double))] 
public class ProgressBarMaximumConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if ((double)value == 0) 
     { 
      return 1; 
     } 

     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
}