是否可以使用转换器返回绑定到.ToList()
的{{1}}的匿名类型的集合Itemssource
?
我试过这个:
//转换器
Datagrid
// xaml中的数据网格声明
class AnonymousTypeToListConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((ObservableCollection<Object>)value).ToList();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
这似乎不起作用 - <DataGrid ItemsSource="{Binding SelectionData, Converter={StaticResource anonConverter}}" AutoGenerateColumns="True"/>
被调用但我的Converter
为空:
我的理由是因为Datagrid
不喜欢匿名类型...如定义here但我不认为这种方法对我们使用MVVM方法真的有效... < / p>
答案 0 :(得分:0)
评论很难阅读,所以我会继续回答。
他的意思是他无法使用IEnumerable
作为DataContext
,因此他选择了选项来调用ToList()
来转换它进入List
。正如我在上次评论中向您展示的那样,他可以轻松地将IEnumerable
传递给ObservableCollection<T>
构造函数:
DataContext = new ObservableCollection(
list.Select(v => new { id = v, name = "name " + v }));
将ObservableCollection<Location>
投射到您ObservableCollection<Object>
中的Converter
就好了。无论如何我还是不知道它是什么,但你最好这样做:
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
return new ObservableCollection<Location>((ObservableCollection<Location>)value);
}
当然,将ObservableCollection<Location>
转换为ObservableCollection<Location>
然后将其传递给新的ObservableCollection<Location>
是没有意义的,但我猜你实际上会做其他事情在那里。
如果您告诉我们您使用Converter
实际尝试实现的目标,那么您可能会得到更好的答案吗?
答案 1 :(得分:0)
具有匿名类型的对象是内部的。只有在完全信任的情况下运行时,才能绑定到匿名类型的属性。
通常,应限制Internet应用程序直接访问关键系统资源,以防止恶意破坏。默认情况下,HTML和客户端脚本语言无法访问关键系统资源。由于Windows Presentation Foundation(WPF)浏览器托管的应用程序可以从浏览器启动,因此它们应该符合一组类似的限制。为了实施这些限制,WPF依赖于代码访问安全性(CAS)和ClickOnce。
简而言之,WPF使用部分可信安全性运行,因此默认情况下Binding不能与匿名类型一起使用。
但我敢打赌互联网上有“解决方法”。 :)