プログレスバーがあり、その値はプロパティにバインドされています:
<ProgressBar x:Name="progressBar"
Margin="0,2,0,0"
Height="20"
Value="{Binding CompassLogLoadPercent}"
Foreground="Blue"
Visibility="{Binding CompassLogLoadCompleted,
Converter={StaticResource BooleanToVisibilityConverter}}"
ToolTip="Loading">
</ProgressBar>
およびプロパティ:
public double CompassLogLoadPercent {
get { return _compassLogLoadPercent; }
private set {
if (value != _compassLogLoadPercent) {
_compassLogLoadPercent = value;
NotifyPropertyChanged();
}
}
}
別のスレッドで、その値が更新されます。
for (int j = 0; j < lines.Count(); j++) {
...
CompassLogLoadPercent = ((double) j /lines.Count())*100;
}
スレッドは TASK を使用して作成されます。
Task.Run(() => { LoadLogFile(fileName); });
プログレスバーが更新されないのはなぜですか? これを修正するにはどうすればよいですか?
更新:詳細情報
Datacontext: (dataContext が正しいと確信しています)
cLT.progressBar.DataContext = logSession;
の実装INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(
[CallerMemberName] String propertyName = "") {
PropertyChangedEventHandler eventHandler = PropertyChanged;
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs(propertyName));
}
}