C# 数据网格水平绑定
标题可能有误,但请继续阅读 我需要一个动态datagrid,因此我正在使用此方法创建列,该方法将获取要显示的“选定”列: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.
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();
}
}