如何将组合框与转换器绑定到WPF中的列表

时间:2014-12-03 00:12:03

标签: c# wpf combobox

我试图将组合框绑定到列表代码。组合框显示:A&乙

<ComboBox ItemsSource="{Binding Path=Codes}"/>

public SettingsWindow()
{
    InitializeComponent();

    Codes = new List<Code> {Code.A, Code.B};

    DataContext = this;
}

我已经定义了一个转换器,以在组合框中显示更易理解的信息:

public class CodeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var code = (Code)value;

        string text;

        if (code == Code.A)
        {
            text = "ACI318-99";
        }
        else
        {
           text = "ACI318-11";
        }
        return text;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
} 

但是我不知道如何在我的XAML中使用这个转换器,所以我将有ACI318-99&amp;我的组合框中的ACI318-11。

3 个答案:

答案 0 :(得分:7)

您应该设置Combobox的ItemTemplate,并在其中使用Converter。

<ComboBox ItemsSource="{Binding Codes}">
   <ComboBox.ItemTemplate>
     <DataTemplate>
      <TextBlock Text="{Binding Path=., Converter={StaticResource converterInstance}}"/>
     </DataTemplate>
  </ComboBox.ItemTemplate>          
</ComboBox>

这里,converterInstance应该是资源字典中自定义转换器的一个实例。

答案 1 :(得分:2)

Caliburn Micro的惯例并没有那么不同,但我只想将它添加到未来的搜索者中。 (在我的情况下不需要Path =。)

<ComboBox x:Name="MyPropertyWithItems">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Converter={StaticResource converterInstance}}"/>
    </DataTemplate>
  </ComboBox.ItemTemplate>          
</ComboBox>

答案 2 :(得分:1)

尝试

<Window.Resources>
    <CodeConverter x:Key="CodeConverter"/>
</Window.Resources>

<ComboBox ItemsSource="{Binding Path="Codes" Converter="{StaticResource CodeConverter}}"/>