【发布时间】:2015-11-08 10:46:59
【问题描述】:
我对 WPF 非常陌生,遇到以下问题:
我正在尝试开发一个练习应用程序来帮助我控制我的预算。
我有一个像这样的 Partida 类:
public class Partida
{
public delegate void PartidaChangedHandler(Partida p);
public event PartidaChangedHandler OnPartidaChanged;
private ObservableCollection<PartidaEntry> content;
public Partida()
{
content = new ObservableCollection<PartidaEntry>();
content.CollectionChanged += PartidaEntriesCollectionChanged;
}
public void PartidaEntriesCollectionChanged(object s, NotifyCollectionChangedEventArgs args)
{
if (OnPartidaChanged != null)
{
OnPartidaChanged(this);
}
}
}
我正在使用 Datagrid 显示 content 集合,但我需要知道此类的 content 集合何时更改并触发 OnPartidaChanged 事件。
在课堂之外(在 MainWindow 中)我连接到 OnPartidaChanged 事件,如下所示:
p.OnPartidaChanged += (Partida ppp) =>
{
int foo = 5;
MessageBox.Show("A partida has changed!");
};
当我在 DataGrid 中添加新行时,事件会正确触发,但是一旦执行 MessageBox,我就会收到带有以下消息的 InvalidOperationException:
ItemsControl 与其项目源不一致。
知道如何解决这个问题而不失去监听 ObservableCollection 的 CollectionChanged 事件并在该事件之后触发 OnPartidaChanged 的能力吗?
提前致谢!
P.S.:另外,我想知道 MessageBox 与 ItemControl 到底有什么关系……如果 MessageBox 只显示一个简单的框,为什么会触发异常! :S
【问题讨论】:
-
您可以发布您的 ItemsControl 的 xaml 吗?
-
我在这里发现了另一个与完全相同的问题 (stackoverflow.com/questions/19120504/…) 的问题。选择的答案只是删除 MessageBox.Show(),实际上他们说删除整个 CollectionChanged 事件处理程序。但是实际上并不能解决问题!
-
@FjjF 我的链接答案如何不能解决您的问题?删除
MessageBox.Show()调用后是否仍会出现异常?你能澄清一下吗?