В моей ViewModel есть свойство, значение которого изменено в методе DoWork для BackgroundWorker. Когда я запускаю приложение и нажимаю кнопку, которая запускает BackgroundWorker, я вижу, как изменяется значение этого свойства. Однако, когда я открываю новое окно, это свойство сохраняет свое значение по умолчанию и не обновляется, хотя BackgroundWorker все еще работает.Обновить значение свойства в другом окне в WPF
Ее это код в моем ViewModel:
private string currentData;
...
public ViewModel()
{
...
// Property initialised with a default value
currentData = "BackgroundWorker is not running";
...
}
public string CurrentData
{
get { return this.currentData; }
private set
{
if (this.currentData != value)
{
this.currentData = value;
this.RaisePropertyChanged("CurrentData");
}
}
}
private void DoWork(object sender, DoWorkEventArgs e)
{
isUpdating = true;
...
this.CurrentData = "BackgroundWorker is running...";
for (...)
{
...
if(...)
{
this.CurrentData = "value1";
}
else
{
this.CurrentData = "value2";
...
}
}
}
RaisePropertyChanged Метод:
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
XAML-код для обоих окон (MainWindow и newtWindow):
<TextBlock Margin="10" MinWidth="250" VerticalAlignment="Center" Text="{Binding CurrentData}" FontSize="12" Foreground="White" HorizontalAlignment="Left" />
BackgroundWorker:
private readonly BackgroundWorker worker;
...
public ImageViewModel()
{
currentData = "BackgroundWorker is not running";
this.worker = new BackgroundWorker();
this.worker.DoWork += this.DoWork;
this.worker.ProgressChanged += this.ProgressChanged;
this.worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_Completeted);
this.worker.WorkerReportsProgress = true;
}
Можете ли вы сказать, что я делаю неправильно, и как я могу это исправить?
Существует много эллипсов (...). Вы не видите определения класса, t см. метод 'RaisePropertyChanged', и вы не видите какого-либо события. Пожалуйста, предоставьте код, который бы действительно скомпилировал, в противном случае почти невозможно, что не так. – Sefe
ellipses (...) просто представляют собой множество операций, которые выполняются. так как код очень длинный – Guilian
Y ou имеет экземпляр A класса Whatevs. Вы изменяете свойства экземпляра A. Если вы хотите, чтобы два окна отображали эту измененную версию экземпляра A, тогда оба окна должны иметь ссылки на экземпляр A. Как вы делитесь экземпляром между обоими окнами, зависит от вашего дизайна, который создает окна и то, как они построены. – Will