我有一个类,它是C#WPF应用程序中ViewModel层的一部分。创建新的ObservableCollection对象并将其分配给this.AllPositions时发生错误。该错误表明ObservableCollection具有一些无效参数。 ObservableCollection的工具提示表明它有三个重载的构造函数。第一个没有接收参数。第二个接收 IEnumberable<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'转换为'System.Collections.Generic.IEnumerable&gt;'
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());
}
}
答案 0 :(得分:2)
与错误消息完全相同:
ObservableCollection<Dictionary<string, string>>(argument);
预计argument
的以下类型之一的参数:
IEnumerable<Dictionary<string,string>>
List<Dictionary<string,string>>
在构造函数中传递的是
的返回值_pRepo.GetPositions();
哪种类型
Dictionary<string, string>
您不能将元素指定为集合。
如果您希望字典本身可以观察,那么如果您为它们进行谷歌搜索,则可以使用某些ObservableDictionary
实现。如果您确实需要一个包含多个词典的列表,并且打算将_pRepo.GetPositions()
的返回值作为该可观察集合中的第一个项目,则可以执行以下操作:
this.AllPositions = new ObservableCollection<Dictionary<string, string>(
new [] {_pRepo.GetPositions() });
答案 1 :(得分:1)
您说GetPositions
方法返回Dictionary<string, string>
。但是您需要IEnumerable<Dictionary<string, string>>
,即字典的列表。
所以制作一个数组:
new[] { _pRepo.GetPositions() }
在上下文中:
AllPositions = new ObservableCollection<Dictionary<string, string>>(
new[] { _pRepo.GetPositions() });
答案 2 :(得分:0)
根据评论中发布的错误,您的方法_pRepo.GetPositions()
会返回Dictionary<string, string>
类型。现在,您的收藏集AllPositions
属于ObservableCollection<Dictionary<string, string>>
,这意味着它基本上是List
Dictionary<string,string>
。
您要做的是将Dictionary
转换为列表。我的猜测是改变你的收藏类型
ObservableCollection<Dictionary<string, string>>
到
ObservableCollection<KeyValuePair<string, string>>
这是因为您从方法中收到了一个字典。