Я пытаюсь обновить графический интерфейс при изменении значения словаря в WPF, MVVM.По сути, я получил следующий словарь по отдельным потокам и библиотеке / проекту:
public static Dictionary<string, string> ProgressStageDictionary = new Dictionary<string, string>
{
{"Data Initiation", ""},
{"Data Import", ""}
};
Дочерняя библиотека / проект - это отдельное приложение, которое не знает о графическом интерфейсе и не имеет его.Я пытаюсь обновить GUI из него. У меня возникла бы проблема со ссылкой на проект как ссылка на проект GUI на дочерний проект, а не наоборот.Вот почему я не могу вызвать GUI из этой библиотеки, используя, например, DispatcherHelper.CheckBeginInvokeOnUI .
Однако GUI как основной поток должен знать о дочерних потоках.Поэтому для достижения этого я создал INotifyPropertyChanged Событие:
public class ViewModelBase: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string caller = null)
{
var handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(caller));
}
}
Я связал его с моей переменной графического интерфейса MVVM
private List<StepItem> _stepItems { get; set; }
public List<StepItem> StepItems
{
get => _stepItems;
set
{
_stepItems = value;
OnPropertyChanged(nameof(Child.ProgressStageDictionary));
Thread.Sleep(250);
}
}
Мой графический интерфейсдолжен обновляться всякий раз, когда Child.ProgressStageDictionary обновляется.Тем не менее, мой графический интерфейс не ловит это.Что мне нужно изменить, чтобы иметь возможность просматривать обновления переменных в дочерних потоках?