2013-05-17 98 views
0

我有一個ComboBox,其ItemSource是MyClass的ListCollectionView。組合框使用下面的ItemTemplate:在DataTemplate/ItemTemplate中綁定

<Style x:Key="StyleComboBoxGroups" BasedOn="{StaticResource BaseComboBox}" TargetType="{x:Type ComboBox}"> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <BulletDecorator VerticalAlignment="Center"> 
         <BulletDecorator.Bullet> 
          <Ellipse Margin="3,0,0,0" Width="4" Height="4"/> 
         </BulletDecorator.Bullet> 
         <TextBlock Margin="3,0,0,0" Style="{StaticResource BaseTextBlock}" Text="{Binding}"/> 
        </BulletDecorator> 
       </StackPanel> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

MyClass的暴露了兩個屬性:

公共密封類MyClass的 { 公共MyEnum Property1 {獲得;組; } public String Property2 {get;組; } }

我想弄清楚如何使TextBlock.Foreground顏色取決於Property1。目前我試過這些無濟於事:

Foreground="{Binding Property1, Converter=MyEnumToColorConverter}" 
Foreground="{Binding Converter=MyEnumToColorConverter, Path=Property1}" 
Foreground="{Binding Converter=MyEnumToColorConverter, Path=Property1, Source={Binding}}" 

但我總是得到一個異常。我如何正確綁定到ComboBox項目?

回答

1

聲明一個將成爲轉換器實例的資源。

<Style.Resources> 
    <namespace:MyEnumToColorConverter x:Key="MyEnumToColorConverter" /> 
</Style.Resources> 

...然後使用該資源在你的綁定:

Foreground="{Binding Property1, Converter={StaticResource MyEnumToColorConverter}}" 

另一種是引用靜態的轉換器,在這種情況下,你不會需要創建一個資源實例。把你的轉換器轉換成單:

public class MyEnumColorConverter : IValueConverter 
{ 
    private MyEnumColorConverter() { } 

    private static IValueConverter _instance; 
    public static IValueConverter Instance 
    { 
      get { return _instance ?? (_instance = new MyEnumColorConverter); } 
    } 

    // implement IValueConverter 

} 

在XAML中,你會像這樣引用它:

Foreground="{Binding Property1, Converter={x:Static namespace:MyEnumColorConverter.Instance}}" 
1

如果你實際上有MyEnumToColorConverter型轉換,然後才能在綁定使用它,你需要首先聲明它的一個實例。通常情況下,你會做,在父控件(或樣式)的Resources部分是這樣的:

<Style.Resources> 
    <myNamespace:MyEnumToColorConverter x:Key="EnumToColorConverter" /> 
</Style.Resources> 

然後,您可以用StaticResource標記擴展引用它:

Foreground="{Binding Path=Property1, Converter={StaticResource EnumToColorConverter}}"