簡體   English   中英

在DataTemplate / ItemTemplate中綁定

[英]Binding in DataTemplate/ItemTemplate

我有一個ComboBox,其ItemSource是MyClass的ListCollectionView。 ComboBox使用以下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公開了兩個屬性:

public sealed class MyClass {public MyEnum Property1 {get; 組; public String Property2 {get; 組; }}

我試圖弄清楚如何根據Property1制作TextBlock.Foreground顏色。 目前我試過這些無濟於事:

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

但我總是得到一個例外。 如何正確綁定ComboBox項?

聲明將成為轉換器實例的資源。

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

如果你實際上有一個MyEnumToColorConverter類型的轉換器,那么為了在綁定中使用它,你需要首先聲明它的一個實例。 通常,您將在父控件(或樣式)的“ Resources部分中執行此操作,例如:

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

然后,您可以使用StaticResource標記擴展名引用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM