2009-12-18 52 views
0

我的问题是在这里: 我有一些类WPF Datagrid的不尊重项目属性值的变化

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(); 
    } 
} 

和收集组件,在另一个类中声明:

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; 
    } 

该组件列表中显示的在WPF DataGrid中。我的想法:用于运行服务的绿色背景颜色,红色 - 用于停止。工作正常,但只在开始。由定时器调用CheckServices(),如果返回值为True,我想重新渲染我的网格,尊重新的服务状态。这里是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> 

我应该调用显式的任何方法使DataGrid无效?我尝试过使用InvalidateProperty,InvalidateVisual,GetBindingExpression(ItemContainerStyleProperty).UpdateTarget(),但没有任何工作。谁能帮忙?

回答

0

Component类必须实现INotifyPropertyChanged,并在事件的某些属性发生更改时引发该事件。

+0

它的工作!非常简单。谢谢。 – Pavel 2009-12-18 08:08:04