У меня есть ProgressBar и его значение переплетено свойство:Обновление прогрессбара от фонового потока
<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.Run(() => { LoadLogFile(fileName); });
Почему прогресс не обновляется и как это исправить?
UPDATE: Подробнее
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));
}
}
Вы действительно должны использовать ['Dispatcher'] (http: // msdn .microsoft.com/en-us/magazine/cc163328.aspx) ... –
Вы не указали, где вы установили свой 'DataContext'. –
Проверьте этот ответ: [stackoverflow.com/questions/4621623][1] [1]: http://stackoverflow.com/questions/4621623/wpf-multithreading-ui-dispatcher-in-mvvm – faceman