代码之家  ›  专栏  ›  技术社区  ›  Daniel Situnayake

在绑定的WPF数据网格中显示和编辑可枚举的串联字符串

  •  0
  • Daniel Situnayake  · 技术社区  · 15 年前

    我用的是 WPF公司 DataGrid 有约束力 为了 显示和编辑类的各种属性 . 其中许多属性是 IEnumerable<string> . 我想展示这些 串联的 ,与 用换行符分隔的可枚举项的每一项 编辑之后,串联的字符串应该在每个换行符上拆分,并重新分配到绑定属性中

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

    变成:

    "a    
    b    
    c"
    

    然后在网格中进行编辑:

    "alpha    
    b    
    cat"
    

    {"alpha","b","cat"}

    有没有办法重载一个DataGridColumn类来实现这一点?

    编辑: 多亏了夸特迈斯特,我才有了工作。我使用的是自动生成的列,因此在我的自动生成列事件中,我执行了以下操作:

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

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   Quartermeister    15 年前

    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);
        }
    }