c# - 在组合框中的绑定(bind)项目上使用转换器

标签 c# wpf xaml converter

我有一个绑定(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}}"

但还是不行……有什么想法吗? 谢谢

最佳答案

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

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

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

关于c# - 在组合框中的绑定(bind)项目上使用转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448862/

相关文章:

c# - 为什么我会收到错误消息 : doubled attribute?

wpf - Visual Studio : How to write Editor Extensions with WPF

c# - 绑定(bind)到模型对象列表的 ViewModels 的 WPF 列表

c# - 当前不可见时展开/选择 TreeView 节点

wpf - 如何使数据网格的宽度自动适应父控件的宽度

c# - 是否可以通过反射调用值类型运算符?

c# - 在 C# 中减小图像大小

C# 为什么 App.config 在构建后被复制到我的调试和发布文件夹?

c# - 是否可以绑定(bind)到装饰元素容器上的属性?

c# - 在代码隐藏 C# 中使用 DoubleAnimationUsingKeyFrames 创建 Storyboard