我有一个绑定(bind)到这样的数据表列的组合框:

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

但是仍然不起作用...任何想法吗?
谢谢

最佳答案

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

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

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

10-04 22:22
查看更多