Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据网格水平绑定_C#_Wpf_Silverlight - Fatal编程技术网

C# 数据网格水平绑定

C# 数据网格水平绑定,c#,wpf,silverlight,C#,Wpf,Silverlight,标题可能有误,但请继续阅读 我需要一个动态datagrid,因此我正在使用此方法创建列,该方法将获取要显示的“选定”列: public void ConfigureGridColumns() { App.Instance.MainWindow.grdDetail.mainGrd.Columns.Clear(); var stats = new List<Statistic>(); stats.AddRange(App.

标题可能有误,但请继续阅读

我需要一个动态datagrid,因此我正在使用此方法创建列,该方法将获取要显示的“选定”列:

    public void ConfigureGridColumns()
    {
        App.Instance.MainWindow.grdDetail.mainGrd.Columns.Clear();

        var stats = new List<Statistic>();
        stats.AddRange(App.Instance.Manager.PersonalizeStatistics.OrderBy(x => x.Index).Where(x => x.Selected).Select(x => x.Statistic));

        foreach (var stat in stats)
        {
            var column = new DataGridTextColumn
            {
                Header = stat.Name,
                Binding = new Binding(stat.Key)
            };
        }
    }
问题是:

我将StatisticPersonalizedValue的命名空间作为文本获取

我得到空字符串(Value是StatisticPersonalizedValue的属性,它在第二个方法中被赋值)

我之所以使用模型,是因为我还有正数和负数的设置器。如果这样的话,你知道如何解决这个问题吗?

好的,解决了这个问题

我必须添加一个自定义转换器

Binding = new Binding(stat.Key) { Converter = new StatisticPersonalizedValueConverter() }



public class StatisticPersonalizedValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is StatisticPersonalizedValue)
        {
            return (value as StatisticPersonalizedValue).Value;
        }
        return string.Empty;

    }

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

这就成功了。

一个离题的评论,当你真正知道对象的类型时,请不要使用Var,例如你有一个始终是数据表的Var,一个始终是行的Var,一个始终是statisticpersonalisedvalue的Var…@RhysW我不同意。如果您有一个
KeyValuePair
,该怎么办?它在代码中创建了许多不必要的混乱。我更喜欢使用var。在某些情况下,它可能会造成混乱(这通常可以通过正确的代码格式避免),但它通常是不好的编码实践,原因有几个,其中之一是当您请求帮助时,其他人更难遵循您的代码。。。
        Binding = new Binding(stat.Key)
        Binding = new Binding("Value")
Binding = new Binding(stat.Key) { Converter = new StatisticPersonalizedValueConverter() }



public class StatisticPersonalizedValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is StatisticPersonalizedValue)
        {
            return (value as StatisticPersonalizedValue).Value;
        }
        return string.Empty;

    }

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