You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在后台代码中为ListView的DisplayMemberPath或ItemTemplate添加Converter?

后台代码为ListView配置带Converter的ItemTemplate

DisplayMemberPath属性本身不支持直接应用Converter,所以我们需要通过后台代码手动创建包含Converter的ItemTemplate来实现需求,替代DisplayMemberPath的用法。

步骤1:定义Converter类

先实现一个示例Converter(根据业务需求修改转换逻辑即可):

public class StringToUpperCaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is string str)
            return str.ToUpper();
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

步骤2:后台创建ListView并配置ItemTemplate

直接在代码里构建DataTemplate,给TextBlock的Text绑定添加Converter:

// 实例化自定义Converter
var myConverter = new StringToUpperCaseConverter();

// 创建ListView实例
var listView = new ListView
{
    ItemsSource = SomeObject,
    HorizontalAlignment = HorizontalAlignment.Right,
    SelectionMode = ListViewSelectionMode.Single
};

// 创建DataTemplate
var dataTemplate = new DataTemplate();

// 构建TextBlock的元素工厂
var textBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
// 设置绑定规则,添加Converter
var binding = new Binding
{
    Converter = myConverter,
    // 如需绑定数据项的特定属性,设置Path,比如 Path = "UserName"
    // 默认绑定整个数据对象,和XAML中{Binding}的效果一致
};
textBlockFactory.SetBinding(TextBlock.TextProperty, binding);

// 将元素工厂关联到DataTemplate
dataTemplate.VisualTree = textBlockFactory;

// 给ListView设置ItemTemplate
listView.ItemTemplate = dataTemplate;

// 添加到容器中
var stackPanel = new StackPanel();
stackPanel.Children.Add(listView);

补充说明

  • 如果需要绑定数据项的某个具体属性,在Binding的Path属性中指定属性名称即可
  • 上述代码和你提供的XAML示例逻辑完全对应,都是通过DataTemplate包裹带Converter的绑定来实现自定义显示效果

内容的提问来源于stack exchange,提问作者miniHessel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:23:08