在组合框中使用转换器来处理绑定项

38

我有一个下拉框,它绑定到一个 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}}"

但仍然无法运行...有什么想法吗? 谢谢


嗯……还不知道错误在哪里…… - lebhero
DisplayMemberPath 是一个指向要显示的属性路径,而不是绑定。如果在此应用转换器,则不会实现任何效果。 - H.B.
好的,无论如何感谢你。我正在检查应该如何格式化组合框的项目!!? - lebhero
好的,有没有帮忙的机会? - lebhero
1个回答

86

您可以修改 ComboBoxItemTemplate 并使用您的转换器:

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

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


谢谢,问题是在代码后端绑定下拉框...但这解决了我的问题。 - lebhero
1
这个代码真的会将转换器应用到列表中的任何项吗?我尝试了一下,但似乎转换器只用于所选的项目。 - tabina
@tabina:它可以与像我的示例中那样简单的“ComboBox”一起使用。也许你有一个更复杂的“ComboBox”?这里是一个似乎与你的问题相反的问题的答案:https://dev59.com/02sy5IYBdhLWcg3w5CFr#8247049 - Martin Liversage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接