C# 对组合框中的绑定项使用转换器

C# 对组合框中的绑定项使用转换器,c#,wpf,xaml,converter,C#,Wpf,Xaml,Converter,我有一个绑定到datatable列的组合框,如下所示: ComboBox.DataContext = DataDataTable; ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString(); 列中的IDNr始终以4个字母开头,后跟ID号(例如BLXF1234)。 我需要在组合框中显示没有字母的项目(我需要在组合框中显示1234) 所以我写了一个转换器: class IDPrefix

我有一个绑定到datatable列的组合框,如下所示:

ComboBox.DataContext = DataDataTable;                
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString();
列中的IDNr始终以4个字母开头,后跟ID号(例如BLXF1234)。 我需要在组合框中显示没有字母的项目(我需要在组合框中显示1234)

所以我写了一个转换器:

class IDPrefixValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            string s = value.ToString();
            if (s.Contains("BL"))
            {
                return s.Substring(4);
            }
            else
            {
                return s;
            }
        }
        return "";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }       
否,如何告诉组合框使用转换器显示项目? 我在Xaml中尝试过这个:

ItemsSource="{Binding}" 
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}"
但还是不行…有什么想法吗?
谢谢

您可以修改
组合框的
项目模板
,并使用转换器:

<ComboBox ItemsSource="{Binding}">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>


每个项目都绑定到
itemsource
中的项目。通过在绑定中使用转换器,您可以执行所需的转换。

mmm…仍然不知道错误在哪里…
DisplayMemberPath
是指向要显示的属性的路径,而不是绑定。如果你在那里应用了转换器,你将一无所获。好的,谢谢。我正在检查组合框项目的格式!!!?好的,有没有可能在这方面获得帮助?谢谢,问题是在代码隐藏中绑定组合框…但这解决了我的问题..这真的会将转换器应用于列表中的任何项目吗?我尝试了代码,但似乎转换器只用于所选项目。@tabina:它与一个简单的组合框一起工作,就像我的示例中的组合框一样。也许您有一个更复杂的
组合框
?以下是一个似乎与您的问题相反的问题的答案: