wpf ObservableCollection -无效参数

kh212irz  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(158)

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

z9smfwbn1#

与错误消息所述完全相同:

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() });
js81xvg6

js81xvg62#

你说你的GetPositions方法返回Dictionary<string, string>。但是你需要IEnumerable<Dictionary<string, string>>,也就是一个字典列表。
创建一个数组:

new[] { _pRepo.GetPositions() }

在上下文中:

AllPositions = new ObservableCollection<Dictionary<string, string>>(
    new[] { _pRepo.GetPositions() });
wmtdaxz3

wmtdaxz33#

从你在评论中发布的错误来看,你的方法_pRepo.GetPositions()返回的类型是Dictionary<string, string>。现在你的集合AllPositionsObservableCollection<Dictionary<string, string>>的类型,这意味着它本质上是Dictionary<string,string>List
您要做的是将Dictionary转换为列表。
ObservableCollection<Dictionary<string, string>>

ObservableCollection<KeyValuePair<string, string>>
这是因为你从你的方法中接收了一个字典。

相关问题