3 回答
TA贡献1811条经验 获得超4个赞
你也可以使用LINQ和匿名类型描述用少得多的代码实现同样的结果在这里。
更新:博客已关闭,这里是内容:
(..)表中显示的值表示字符串的长度,而不是字符串值(!)似乎很奇怪,但这是绑定机制的默认工作方式-给定对象,它将尝试绑定到该对象的第一个属性对象(它可以找到的第一个属性)。当传递实例String类时,它绑定到的属性是String.Length,因为没有其他属性可以提供实际的字符串本身。
这意味着要获得正确的绑定,我们需要一个包装器对象,该对象将字符串的实际值作为属性公开:
public class StringWrapper
{
string stringValue;
public string StringValue { get { return stringValue; } set { stringValue = value; } }
public StringWrapper(string s)
{
StringValue = s;
}
}
List<StringWrapper> testData = new List<StringWrapper>();
// add data to the list / convert list of strings to list of string wrappers
Table1.SetDataBinding(testdata);
尽管此解决方案可以按预期工作,但它需要很多行代码(主要是将字符串列表转换为字符串包装器列表)。
我们可以使用LINQ和匿名类型来改进此解决方案-我们将使用LINQ查询来创建字符串包装器的新列表(在我们的例子中,字符串包装器将是匿名类型)。
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
我们要做的最后更改是将LINQ代码移至扩展方法:
public static class StringExtensions
{
public static IEnumerable CreateStringWrapperForBinding(this IEnumerable<string> strings)
{
var values = from data in strings
select new { Value = data };
return values.ToList();
}
这样,我们可以通过对任何字符串集合调用单个方法来重用代码:
Table1.SetDataBinding(testData.CreateStringWrapperForBinding());
- 3 回答
- 0 关注
- 862 浏览
添加回答
举报