我有一个类,它是C# WPF应用程序中ViewModel层的一部分。当创建一个新的ObservableCollection
对象并将其赋值给this.AllPositions
时发生错误。该错误指出ObservableCollection有一些无效的参数。ObservableCollection的工具提示指示它有三个重载的构造函数。
第一个不接收任何参数,第二个接收一个IEnumerable<Dictionary<string,string>> collection
参数,第三个接收List<Dictionary<string,string>> list
参数。我已经尝试了_pRepo.GetPositions().AsEnumerable
和_pRepo.GetPositions().ToList
的许多变体,但似乎不能使编译器满意。
任何帮助将不胜感激。谢谢!
编辑:
_pRepo.GetPositions()
返回Systems.Collections.Generic.Dictionary<string, string>
,准确的错误是
参数% 1:无法从“System.Collections.Generic.Dictionary〈string,string〉”转换为“System.Collections.Generic.IEnumerable〈System.Collections.Generic.Dictionary〈string,string〉〉”
验证码:
public class MalfunctionInputVM : ViewModelBase
{
readonly PositionRepository _pRepo;
public ObservableCollection<Dictionary<string, string>> AllPositions {
get;
private set;
}
public MalfunctionInputVM(PositionRepository pRepo)
{
if (pRepo == null)
throw new ArgumentNullException("pRepo");
_pRepo = pRepo;
// Invalid arguments error occurs here...
this.AllPositions = new ObservableCollection<Dictionary<string, string>>(_pRepo.GetPositions());
}
}
3条答案
按热度按时间z9smfwbn1#
与错误消息所述完全相同:
argument
需要以下类型之一的参数:在构造函数中传递的是
这是典型的
不能像分配集合那样分配元素。
如果你想让字典本身是可观察的,如果你在谷歌上搜索到一些
ObservableDictionary
的实现,你就可以得到它们。如果你需要一个包含多个字典的列表,并且想让_pRepo.GetPositions()
的返回值成为可观察集合中的第一项,你可以这样做:js81xvg62#
你说你的
GetPositions
方法返回Dictionary<string, string>
。但是你需要IEnumerable<Dictionary<string, string>>
,也就是一个字典列表。创建一个数组:
在上下文中:
wmtdaxz33#
从你在评论中发布的错误来看,你的方法
_pRepo.GetPositions()
返回的类型是Dictionary<string, string>
。现在你的集合AllPositions
是ObservableCollection<Dictionary<string, string>>
的类型,这意味着它本质上是Dictionary<string,string>
的List
。您要做的是将
Dictionary
转换为列表。ObservableCollection<Dictionary<string, string>>
到
ObservableCollection<KeyValuePair<string, string>>
这是因为你从你的方法中接收了一个字典。