【问题标题】:Displaying and editing a concatenated string enumerable in a bound WPF DataGrid在绑定的 WPF DataGrid 中显示和编辑可枚举的串联字符串
【发布时间】:2010-06-29 00:02:13
【问题描述】:

我正在使用带有绑定功能的 WPF DataGrid显示和编辑类的各种属性。其中许多属性是IEnumerable<string>。我想显示这些串联可枚举的每个项目由换行符分隔。该值还必须是可编辑的 - 编辑后,应在每个换行符上拆分连接的字符串并分配回绑定属性

例如:

可枚举的{"a","b","c"}

变成:

"a    
b    
c"

然后在网格中将其编辑为:

"alpha    
b    
cat"

并且绑定的属性更新为:{"alpha","b","cat"}

有没有办法重载 DataGridColumn 类之一来做到这一点?

编辑: 感谢 Quartermeister,我得到了这个工作。我正在使用自动生成的列,所以在我的 AutoGeneratingColumn 事件中我做了以下操作:

                if (e.PropertyType == typeof(IEnumerable<string>)) {
                DataGridTextColumn dgtc = e.Column as DataGridTextColumn;
                JoinStringEnumerableConverter con = new JoinStringEnumerableConverter();
                (dgtc.Binding as Binding).Converter = con; 
            }

其中 e 是事件参数。这将转换器添加到绑定中,它似乎工作得非常好。再次感谢。

【问题讨论】:

    标签: c# wpf datagrid binding


    【解决方案1】:

    您可以创建一个自定义 IValueConverter 并在绑定上使用它。像这样的:

    public class JoinConverter
        : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var enumerable = value as IEnumerable<string>;
            if (enumerable == null)
            {
                return DependencyProperty.UnsetValue;
            }
            else
            {
                return string.Join(Environment.NewLine, enumerable.ToArray());
            }
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return value.ToString().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
        }
    }
    

    【讨论】:

    • 这太完美了,谢谢。有关实施,请参阅我的问题。
    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多