2011-03-12 55 views
1

我有一個問題,以自定義的方式綁定我的datagrid的一列。 所以,我有鑑於這樣的代碼:Datagrid綁定到集合,問題與一列轉換

<DataGridTemplateColumn Header="State"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Label Background="" Content="{Binding Path=., Converter={StaticResource measureConv}}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

我的轉換器:

public class MeasureToStateConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     Measure m; 
     try 
     { 
      m = (Measure)value; 
      if (m.Value > 100) 
      { 
       return "Alarm"; 
      } 
     } 
     catch (Exception ex) 
     { 
      Debugger.Log(0, "Convertery", "Bład Convertera MeasureToState" + ex.Message); 
     } 
     return "Normal"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

內容和背景屬性是定製。我使用轉換器來檢查我的集合對象是否滿足某些條件結束返回字符串是或否,但如果我想在一個顏色背景中有字符串字段是,如果它是否我是另一種顏色。

我該怎麼做才容易? 我覺得寫第二個轉換器是一點愚蠢的。

回答

1

您可以使用兩個相應的標籤創建兩個DataTemplates,並使用DataTemplateSelector而不是值轉換器來獲取正確的模板。

+0

我只是實現並採用DataTemplateSelector一個解決方案,它工作得很好。 – Zamboni 2011-03-12 23:21:52

0

綁定的標籤給它自己的內容屬性的背景屬性,並使用一個轉換器返回所需刷:

<Label Background="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource ContentToBrushConverter}"/> 

轉換器將接收內容屬性的值...如果它等於「是「返回Brushes.Green,如果它等於」否「,則返回Brushes.Red

0

您可以重新使用轉換器設置背景並使用DataTrigger更改內容。
我已經假設你的Measure對象中的字段叫做Value。

應用轉換器,以顯示在DataGrid中列內容:

<DataGridTextColumn 
    Header="State" 
    Width="SizeToHeader" 
    Binding="{Binding Value, Converter={StaticResource measureConv}}" 
    CellStyle="{StaticResource ResourceKey=BackgroundCellStyle}" 
    FontSize="20" /> 

應用轉換器來改變風格:

<Window.Resources> 
    <Style TargetType="{x:Type DataGridCell}" x:Key="BackgroundCellStyle"> 
    <Setter Property="Background" Value="Aqua"/> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Value, Converter={StaticResource measureConv}}" Value="Alarm"> 
     <Setter Property="Background" Value="Chartreuse"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</Window.Resources>