mon problème est ici: J'ai une classeWPF DataGrid respecte pas le changement de valeur de la propriété de l'article
public class Component
{
...
private ServiceController service;
...
public int ServiceStatus
{
get
{
switch(service.Status)
{
case ServiceControllerStatus.Stopped:
return 0;
case ServiceControllerStatus.Running:
return 1;
default:
return 2;
}
}
}
public void QueryService()
{
service.Refresh();
}
}
et collection de composants, a déclaré dans une autre classe:
public class Motivation
{
// Downloaded data
...
private ObservableCollection<Component> components;
public ObservableCollection<Component> Components
{
get { return components; }
}
public bool CheckServices()
{
bool changed = false;
foreach (Component C in components)
{
int prevStatus = C.ServiceStatus;
C.QueryService();
if (prevStatus != C.ServiceStatus)
changed = true;
}
return changed;
}
Cette liste des composants affichés dans WPF DataGrid. Mon idée: couleur de fond vert pour les services en cours d'exécution, rouge - pour arrêté. Fonctionne bien, mais seulement au début. CheckServices() appelé par timer, et si la valeur retournée est True, je veux réécrire ma grille, en respectant les nouveaux états de service. Voici XAML:
<Style x:Key="ServiceStateStyle" TargetType="z:DataGridRow">
<Setter Property="Background" Value="Gray" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ServiceStatus}" Value="0">
<Setter Property="Background" Value="LightCoral" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ServiceStatus}" Value="1">
<Setter Property="Background" Value="LightGreen" />
</DataTrigger>
</Style.Triggers>
</Style>
<z:DataGrid Grid.Row="0"
Grid.ColumnSpan="4"
AutoGenerateColumns="False"
x:Name="DataGridComponents"
ItemContainerStyle="{DynamicResource ServiceStateStyle}">
<z:DataGrid.Columns>
<z:DataGridTextColumn IsReadOnly="True"
Header="Component" Width="80"
Binding="{Binding Path=DisplayName}"/>
</z:DataGrid.Columns>
</z:DataGrid>
Devrais-je appeler une méthode explicite pour invalider DataGrid? J'ai essayé avec InvalidateProperty, InvalidateVisual, GetBindingExpression (ItemContainerStyleProperty) .UpdateTarget(), mais rien ne fonctionne. Quelqu'un peut-il aider?
Son travail! Super et simple. Je vous remercie. – Pavel