假设我有以下课程:
public class Values {
public string Value1 {get;set;}
public string Value2 {get;set;}
public string Value3 {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用IValueConverter以特定顺序将此对象的值绑定到GUI组件的ItemsSource:
public class ValuesToListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var valuesObj = (Values ) value;
yield return valuesObj.Value1;
yield return valuesObj.Value3;
yield return valuesObj.Value2;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下错误:
'Convert'的主体不能是迭代器块,因为'object'不是迭代器接口类型.
有没有办法在IValueConverter中懒洋洋地创建这个列表?或者我必须这样做:
return new List<string> { valuesObj.Value1, valuesObj.Value3, valuesObj.Value2 }
Run Code Online (Sandbox Code Playgroud)
迭代器块仅在返回类型为以下之一时定义:
然后,生成的迭代器将成为一个状态机,它完成一个非常特定的契约,该契约提供延迟执行和多个值的延迟迭代.
如果返回对象,这都不适用:您现在需要返回一个对象.
如果您的转换器需要返回IEnumerable,那么您可以这样做 - 但是您需要为迭代器块添加第二个(私有)方法 - 并且返回类型必须是上面列出的方法之一.
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |