ObservableCollection - 无效的参数

时间:2015-04-13 22:45:12

标签: c# wpf mvvm

我有一个类,它是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());
        }
    }

3 个答案:

答案 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>>

这是因为您从方法中收到了一个字典。