KeyValuePair<double,double> 和这些列表
Posted
技术标签:
【中文标题】KeyValuePair<double,double> 和这些列表【英文标题】:KeyValuePair<double,double> and a List of these 【发布时间】:2014-07-03 05:48:41 【问题描述】:我必须显示一个包含 4 个系列的图表。我能够使用我的数据完成这项工作。 但是,当我开始更新我的数据列表时,它会给出一个解析错误(见下文)。 IE它甚至在尝试“更新”图表之前给了我一个错误。哎呀,我什至从等式中删除了图表,我仍然得到相同的解析错误。
我的列表是这样声明的:
public partial class MainWindow : Window
List<KeyValuePair<double, double>> channel1List = new List<KeyValuePair<double, double>>();
List<KeyValuePair<double, double>> channel2List = new List<KeyValuePair<double, double>>();
List<KeyValuePair<double, double>> channel3List = new List<KeyValuePair<double, double>>();
List<KeyValuePair<double, double>> channel4List = new List<KeyValuePair<double, double>>();
List<List<KeyValuePair<double, double>>> rampsList = new List<List<KeyValuePair<double, double>>>();
在我的主要,我有:
// DEFAULT CHANNEL 1 LIST
channel1List.Add(new KeyValuePair<double, double>(0, 0));
channel1List.Add(new KeyValuePair<double, double>(DMIN1, 0));
channel1List.Add(new KeyValuePair<double, double>(DMAX1, 100));
channel1List.Add(new KeyValuePair<double, double>(30, 100));
// DEFAULT CHANNEL 2 LIST
channel2List.Add(new KeyValuePair<double, double>(0, 0));
channel2List.Add(new KeyValuePair<double, double>(DMIN2, 0));
channel2List.Add(new KeyValuePair<double, double>(DMAX2, 100));
channel2List.Add(new KeyValuePair<double, double>(30, 100));
// DEFAULT CHANNEL 3 LIST
channel3List.Add(new KeyValuePair<double, double>(0, 0));
channel3List.Add(new KeyValuePair<double, double>(DMIN3, 0));
channel3List.Add(new KeyValuePair<double, double>(DMAX3, 100));
channel3List.Add(new KeyValuePair<double, double>(30, 100));
// DEFAULT CHANNEL 4 LIST
channel4List.Add(new KeyValuePair<double, double>(0, 0));
channel4List.Add(new KeyValuePair<double, double>(DMIN4, 0));
channel4List.Add(new KeyValuePair<double, double>(DMAX4, 100));
channel4List.Add(new KeyValuePair<double, double>(30, 100));
channel1List.RemoveAt(1);
channel1List.Insert(1, new KeyValuePair<double, double>(DMIN1, 0));
// DEFAULT LIST OF RAMPS
rampsList.Add(channel1List);
rampsList.Add(channel2List);
rampsList.Add(channel3List);
rampsList.Add(channel4List);
// DRAW DEFAULT CHART
rampsChart.DataContext = rampsList;
注意到 2 行“channel1.RemoveAt(1)..../...” 这些只是为了测试,我能够删除一个条目并用一个新条目替换它。 这些系列每个只有 4 个点,我总是只需要更新项目 1 和 2。0 和 3 永远不会更新。
无论如何,上面的这段代码运行良好。它绘制图表。没有解析错误。
现在,就像我说的,当用户移动滑块时,我需要更新此图表。我为这个滑块设置了一个 ValueChanged 事件,它可以很好地更新几个标签。
但如果我有相同的 2 行:
channel1List.RemoveAt(1);
channel1List.Insert(1, new KeyValuePair<double, double>(DMIN1, 0));
然后在构建项目时它没有给我任何错误,但是当我点击开始时给我这个错误......
PresentationFramework.dll 中出现“System.Windows.Markup.XamlParseException”类型的未处理异常
我不知道为什么会这样。
有什么想法吗? 谢谢 史蒂夫
编辑:完整堆栈:
'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 “SWFT Imperium.vshost.exe”(CLR v4.0.30319:SWFT Imperium.vshost.exe):已加载“C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio。 HostingProcess.Utilities.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089 \System.Windows.Forms.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System .Drawing.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\12.0.0.0__b03f5f7f11d50a3a\Microsoft. VisualStudio.HostingProcess.Utilities.Sync.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\12.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio。调试器.Runtime.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'Z:\Temperature Controller\Software\C#\SWFT Imperium (WPF)\SWFT Imperium\SWFT Imperium\bin\Debug\ SWFT Imperium.vshost.exe'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System .Data.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System .Core.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System .xml.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft .CSharp.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089 \System.Xml.Linq.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089 \System.Data.DataSetExtensions.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System .Xaml.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WindowsBase\v4.0_4.0.0.0__31bf3856ad364e35\WindowsBase.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 线程 0x2d84 已退出,代码为 259 (0x103)。 线程 0x2ae0 已退出,代码为 259 (0x103)。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'Z:\Temperature Controller\Software\C#\SWFT Imperium (WPF)\SWFT Imperium\SWFT Imperium\bin\Debug\ SWFT Imperium.exe'。已加载符号。 步入:跨过非用户代码“SWFT_Imperium.App..ctor” 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System .Configuration.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 步入:跨过非用户代码“SWFT_Imperium.App.Main” 步入:跨过非用户代码“SWFT_Imperium.App.InitializeComponent” 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'Z:\Temperature Controller\Software\C#\SWFT Imperium (WPF)\SWFT Imperium\SWFT Imperium\bin\Debug\ System.Windows.Controls.DataVisualization.Toolkit.dll'。已加载符号。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework.Aero\v4.0_4.0.0.0__31bf3856ad364e35\PresentationFramework .Aero.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationUI\v4.0_4.0.0.0__31bf3856ad364e35\PresentationUI.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\PresentationFramework-SystemXml\v4.0_4.0.0.0__b77a5c561934e089\PresentationFramework -SystemXml.dll'。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 'SWFT Imperium.vshost.exe' (CLR v4.0.30319: SWFT Imperium.vshost.exe): 加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\UIAutomationTypes\v4.0_4.0.0.0__31bf3856ad364e35\UIAutomationTypes.dll '。跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。 在 mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的第一次机会异常 PresentationFramework.dll 中出现“System.Windows.Markup.XamlParseException”类型的未处理异常 附加信息:'对与指定绑定约束匹配的'SWFT_Imperium.MainWindow'类型的构造函数的调用引发了异常。行号“4”和行位置“9”。程序“[4628] SWFT Imperium.vshost.exe”已退出,代码为 0 (0x0)。
edit2:XAML 的前几行:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" x:Class="Swiftech_Imperium.MainWindow"
Title="SWFT Imperium" Height="435" Width="510" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen" Icon="Swiftech.ico" Closing="Window_Closing" MouseDown="Grid_MouseDown" WindowStyle="None" BorderThickness="1" BorderBrush="Black" Foreground="Black">
<Window.Resources>
【问题讨论】:
你能提供更完整的堆栈跟踪吗? 不知道该怎么做>.> 在调试器中运行您的应用并从输出面板复制整个错误。 谢谢 - 用堆栈编辑 您能否也添加主窗口 .xaml 的内容...特别是“行号 '4' 和行位置 '9'”处的绑定。看来这是导致问题的原因。它与这段代码有什么关系? 【参考方案1】:我怀疑你的
channel1List.RemoveAt(1);
代码在你之前执行
channel1List.Add(new KeyValuePair<double, double>(0, 0)); channel1List.Add(new KeyValuePair<double, double>(DMIN1, 0)); channel1List.Add(new KeyValuePair<double, double>(DMAX1, 100)); channel1List.Add(new KeyValuePair<double, double>(30, 100));
导致此异常的原因
确保执行顺序始终正确,例如通过从构造函数调用集合填充方法。
【讨论】:
好电话 - 我应该把应用默认值的代码放在哪里?现在,它在 main 方法中? 是的,就是这样!稍微移动了一下,效果很好,非常感谢! 构造函数通常首先执行,因为在处理实例上的任何其他事件之前需要完全构造对象。以上是关于KeyValuePair<double,double> 和这些列表的主要内容,如果未能解决你的问题,请参考以下文章
从 IEnumerable<KeyValuePair<>> 重新创建字典
从 List<KeyValuePair<string,string>> 返回匹配