(对不起,如果标题很麻烦,我觉得很难让它获得权利。)
我在一个对象中迭代(for
或foreach
)ObservableCollection
对象时遇到了问题,该对象放在另一个ObservableCollection
中。
这是我的“对象”类(在便携式类库中)
public class NotationGroup : INotifyPropertyChanged
{
...
private ObservableCollection<Notation> _notations;
...
public ObservableCollection<Notation> Notations
{
get { return _notations; }
set { _notations = value; NotifyPropertyChanged("Notations"); }
}
...
}
这就是我如何访问
public class MainWindowModelView : INotifyPropertyChanged
{
...
private ObservableCollection<NotationGroup> _notationGroups;
....
public ObservableCollection<NotationGroup> NotationGroups
{ get { return _notationGroups; } set { _notationGroups = value; NotifyPropertyChanged("NotationGroups"); } }
...
public void AddOrUpdateNote(Notes note, ModifierKeys mKeys)
{
if (mKeys == ModifierKeys.Control)
{
foreach (NotationGroup item in NotationGroups)
{
for (int i = 0; i < item.Notations.Count; i++) //ERROR 1
{
if (item.Notations[i].IsSelected) //ERROR 2
{
item.Notations[i].Note = note; //ERROR 3
}
}
}
}
else
{
if (NotationGroups.Count(x => x.IsSelected) > 1)
{
var selectedNG = NotationGroups.FirstOrDefault(x => x.IsSelected);
ClearSelected();
(selectedNG as NotationGroup).Notations[0].IsSelected = true; //ERROR 4
}
...
}
}
}
(一些针对清晰度的修改代码)
以下是错误消息:
错误1
类型'System.Collections.ObjectModel.ObservableCollection`1'在未引用的程序集中定义。您必须添加对程序集'System.Windows,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'的引用。
在错误1上,我尝试同时使用for
和foreach
,但它也一样。
错误2
运营商'&lt;'不能应用于'int'和'method group'类型的操作数
错误3
无法将带有[]的索引应用于类型为'System.Collections.ObjectModel.ObservableCollection`1'的表达式
错误4
无法将带有[]的索引应用于类型为'System.Collections.ObjectModel.ObservableCollection`1'的表达式
我也添加了System.Windows
,但它没有帮助。
有什么想法吗?感谢。
答案 0 :(得分:2)
您需要做的就是将这些错误复制并粘贴到任何搜索引擎中,以便快速轻松地找到答案。但是,当你把它们粘贴在这里时,我会为你做你的工作:
无法将带有[]的索引应用于类型为'System.Collections.ObjectModel.ObservableCollection`1'的表达式
真的意味着它所说的......你不能在ObservableCollection
上使用索引。那么,你在哪里这样做?该错误甚至会告诉您:
item.Notations[i].Note = note;
和
(selectedNG as NotationGroup).Notations[0].IsSelected = true;
解决方案?如果您在线搜索过,您会发现我们使用ElementAt
方法使用LinQ
访问元素:
item.Notations.ElementAt(i).Note = note;
和
(selectedNG as NotationGroup).Notations.ElementAt(0).IsSelected = true;
当然,如果i
超出相关集合的范围,这仍然会爆发。下一个:
运营商'&lt;'不能应用于'int'和'method group'类型的操作数
你说这发生在这一行,但我看不出怎么......这似乎更像是最后一个错误:
if(item.Notations [i] .IsSelected)
您可能只需要在线搜索该内容。最后,我们有一个简单的参考问题:
类型'System.Collections.ObjectModel.ObservableCollection`1'在未引用的程序集中定义。您必须添加对程序集'System.Windows,Version = 2.0.5.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e,Retargetable = Yes'的引用。
同样,一个非常明显且明确的错误...... ObservableCollection
在未引用的程序集中定义。您必须添加对程序集System.Windows
的引用。修复?按照它说的做...将System.Windows
dll的引用添加到您的项目中。