У меня есть ObservableCollection с именем PingStatisticCollection.IP периодически пингуются.Успешность немедленно записывается в элемент ObservableCollection как 0 для успеха, иначе 1. Визуальное обновление пользовательского интерфейса продолжается до завершения теста.Если тест не пройден, тест следующего IP-адреса должен подождать 1000 мсек. Если больше IP-адресов невозможно пропинговать, обновление пользовательского интерфейса длится еще дольше.Как я могу обновить пользовательский интерфейс сразу после тестирования одного IP в цикле?
Части моего представления:
<DataGrid x:Name="grdStatistic" ItemsSource="{Binding PingStatisticCollection, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" SelectedItem="SelectedPingStatisticElement"
AutoGenerateColumns="False" IsReadOnly="True" AlternatingRowBackground="#FFFFE880" >
<DataGrid.Columns>
<DataGridTextColumn Header="IP" Width="100" Binding="{Binding IP}"/>
<DataGridTemplateColumn Width="70">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock>Ping</TextBlock>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<Image Name="imagegreen" Source="/Resources/green.png" Width="20" Height="20" Margin="5,0" />
<Image Name="imagered" Source="/Resources/red.png" Width="20" Height="20" Margin="5,0"/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=actPingSuccess, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="0">
<Setter TargetName="imagegreen" Property="Visibility" Value="Visible"/>
<Setter TargetName="imagered" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=actPingSuccess, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Value="1">
<Setter TargetName="imagegreen" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="imagered" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- ... -->
</DataGrid.Columns>
</DataGrid>
// извлечения из ViewModel:
//Команда привязана к кнопке для проверки работоспособности
void OnTestIP(object sender)
{
string sIP;
bool bSuccess;
foreach (var p in PingStatisticCollection) // load from database
{
SelectedPingStatisticElement = p;
lock(p)
{
bSuccess = PingHost(p.IP, 1000 );
SavePingSuccess(p, bSuccess);
// actual success and last 5 tests determine red, yellow, green iconcolor
DetermineIconColors(p, PingStatisticCollection);
}
}
}
private ObservableCollection<PingStatistic> _PingStatisticCollection;
public ObservableCollection<PingStatistic> PingStatisticCollection
{
get { return _PingStatisticCollection; }
set
{ _PingStatisticCollection = value; OnPropertyChanged("PingStatisticCollection"); }
}
//extracts from Model:
class PingStatistic: INotifyPropertyChanged
{
private string _IP;
public string IP // +
{
get { return _IP; }
set
{ if (value != _IP)
{ _IP = value; OnPropertyChanged("IP");}
}
}
public int actPingSuccess
{
get { return _actPingSuccess; }
set
{
_actPingSuccess = value;
OnPropertyChanged("actPingSuccess");
}
}
}
В данный момент IconColors для всех IP-адресов обновляются после посещения каждого IP-адреса.Я хочу немедленно обновить цвет сразу после посещения и оценки.Кто-нибудь знает, как решить эту проблему?Спасибо, Бернд