【发布时间】:2017-03-28 05:07:46
【问题描述】:
所以我正在尝试将 WPF 的动态数据显示合并到我的 MVVM caliburn 项目中(如果有人希望测试此错误,我正在使用来自动态数据显示的未来的 LineChart 控件)。有一个 LineChart 绑定到 ObservableCollection。它仅在集合是在具有 LineChart 的控件的代码中进行时才有效。如果您尝试将 ViewModel 绑定到集合,则依赖属性会引发 InvalidOperationException。这个问题怎么解决?
我已经看到,当您更改属性绑定到的集合并知道修复该问题的方法时会发生这种情况,但在绑定的实际过程中从来没有。我已经尝试将集合的创建放在调度程序调用中(就像您对添加或删除所做的那样),但它没有帮助。
编辑:正如我在第二段中所说,例外不是在更改集合的时候。它在绑定点被提升。更重要的是,我尝试使用other question 中的解决方案,但它们没有帮助。
编辑 #2:异常消息是“调用线程无法访问此对象,因为不同的线程拥有它”。 人们不断告诉我收集更改的解决方案,但它甚至没有涉及到更改。它在绑定阶段失败(xaml 中的 ItemsSource="{binding collection}")。
编辑 #3:我仔细检查并注意到 ViewModel 是在 UI 线程中创建的,这只会提出更多问题。
【问题讨论】:
-
如果您可以发布
StackTrace或至少是Message的InvalidOperationException,这将非常有帮助。 -
好多了。似乎您有一些代码在调度程序线程之外分配了某些 UI 元素的
ItemsSource属性。更重要的是,这绝对是在 C# 中而不是在 XAML 代码中完成的任务。所以它不是数据绑定,而是手动属性分配。您可以发布MainWindow.xaml.cs的第 75 行吗?或者甚至是整个方法gogogo()和线程的开始?找到异常的原因应该不难。 -
我检查了您的代码,但很抱歉,它对我来说完全无法使用。首先,它不会编译。 (这很糟糕。)其次,我不清楚异常到底发生在哪里。你有很多代码和注释代码。我不能只是猜测你的意思以及它发生在哪里。所以请清理您的代码,删除注释代码,准确显示异常发生的行,使其可编译,然后重新上传。 (这叫做Minimal, Complete, and Verifiable example。)等你重新上传,我再看一遍。
-
而“最小”也意味着你删除所有与你的异常无关的代码。例如,我不知道
SynchronizedObservableCollection与它有什么关系,以及为什么TouchView甚至存在。
标签: c# wpf multithreading xaml mvvm