2013-02-21 99 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; 
    } 
}