Я пытался изучить и использовать WPF и привязку данных. У меня есть ListView, который имеет столбец, который будет отображать один из трех изображений, как показано в этом фрагменте:C# WPF OnPropertyChanged В цикле foreach
<GridViewColumn Header="Status" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image x:Name="TheImage" Height="18"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Status}" Value="queued">
<Setter TargetName="TheImage" Property="Source" Value="Images\que_48.png" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Status}" Value="completed">
<Setter TargetName="TheImage" Property="Source" Value="Images\complete_48.png" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Status}" Value="failed">
<Setter TargetName="TheImage" Property="Source" Value="Images\fail_48.png" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
У меня есть класс (BatchQueueItem), который имеет среди него этот код для обработки PropertyChange Событие:
public string status;
public string Status
{
get { return status; }
set
{
status = value;
OnPropertyChanged("Status");
}
}
// Create the OnPropertyChanged method to raise the event
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string status)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(status));
}
}
и у меня есть кнопка на странице окна ListView:
private void btnStart_Click(object sender, RoutedEventArgs e)
{
foreach (var item in listView1.Items)
{
BatchQueueItem bqi = (BatchQueueItem)item;
string currFile = bqi.CurrFile;
if (mainWindow.isIsbnInFileName(ref currFile))
{
bqi.Status = "completed";
}
else
{
bqi.Status = "failed";
}
}
}
проблема, которую я имею, что изображения не не обновляются, пока цикл Еогеасп завершен и кнопок BTN tart_Click() завершен. Как только это произойдет, все изображения будут обновляться, как и ожидалось, просто сразу же не итеративно.
То, что я хочу, и то, что я думал, будет состоять в том, что каждая итерация цикла foreach обновит изображение соответствующей строки. Несомненно, мне не хватает чего-то важного в том, как все это работает. Какие-нибудь советы?
На самом деле вам не нужно использовать Dispatcher.Invoke здесь: WPF автоматически упорядочивает уведомление PropertyChanged по потокам для привязок, поэтому вы можете обновить свойство непосредственно из рабочего потока. –
Хорошо, вы, ребята, потеряли меня здесь. Любой шанс на ссылку или фрагмент кода, чтобы прояснить ситуацию немного мольбы? – Dave