2017-02-27 46 views
1

我有更新ProgressBar非常奇怪的情況。 基本上,我有SemanticZoomZoomedIn模式我有ListView。每個ListView包含ProgressBar。這是最有趣的。UWP ProgressBar和Binding

工作(值由我設定):

<ProgressBar Minimum="1488240000" Maximum="1488241000" Value="{Binding CurrentTime, Mode=OneWay}" /> 

不工作(值綁定):

<ProgressBar Minimum="{Binding Start, Mode=OneTime}" Maximum="{Binding Finish, Mode=OneTime}" Value="{Binding CurrentTime, Mode=OneWay}" /> 

它的工作不是這樣的方式: Start被綁定,OK。 Finish已綁定,確定。 CurrentTime被綁定,PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime)))觸發,但在這裏:

public double CurrentTime 
    { 
     get 
     { 
      return currentTime; 
      //It's trigged only first time 
      //But should be triggered every time PropertyChanged triggered 
     } 

     set 
     { 
      currentTime = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime))); 
      //It's OK, it's trigged every time I update this property 
     } 
    } 

因此,有絕對的東西了吸氣劑。有任何想法嗎?

順便說一下,當我玩ProgressBar屬性的位置時,我有奇怪的結果。例如,如果我設置Minimum,然後Maximum然後Value我有ProgressBar 100%。如果我設置了ValueMaximumMinimum - 沒關係。

回答

3

當綁定的可擴展應用程序標記語言(XAML)MinimumMaximum值,聲明BindingMaximum第一。如果MaximumBindingMinimum後宣佈,爲Maximum綁定的值被忽略,可能會出現以下情況:

爲避免此行爲,請在Maximum的第一個用可擴展應用程序標記語言(XAML)聲明Binding

欲瞭解更多信息,請參閱下Maximum財產注意

雖然綁定Value屬性,Binding必須是TwoWay。所以你可以改變你的代碼,如下所示:

<ProgressBar Maximum="{Binding Finish, Mode=OneTime}" Minimum="{Binding Start, Mode=OneTime}" Value="{Binding CurrentTime,Mode=TwoWay}" /> 

然後它應該能夠工作。

+0

是的,這是完美的!謝謝! – Vlad

1

我認爲這將解決它

<ProgressBar 
     Minimum="{Binding Min, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     Maximum="{Binding Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     Value="{Binding Progress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    </ProgressBar>