我有一個名爲ShellViewModel的類和一個名爲Shell.xaml的WPF頁面。在我的ShellViewModel中,我有一個函數,用於從.csv文件中讀取數據,並將數據顯示在Shell.xaml中的數據網格中。數據在圖形上繪製爲線圖。System.ArgumentException:'Value'屬性已被'Point'註冊
文件讀取正常,數據在數據網格上正確顯示。數據的結構有25列。第一列是數據的名稱,接下來的24列是數據點。雖然數據在數據網格中正確顯示,但圖形中沒有數據點。
這是我的圖的代碼。我得到的錯誤是:
筆記「
System.ArgumentException‘值’屬性已經由‘點’註冊」:obsLoadForecasts已存儲的數據被顯示在從ShellViewModel.cs數據網格
代碼圖表:
public void UpdateLoadChart() { var forecastList = obsLoadForecasts.ToList(); var dataList = new List<ForecastPoint>(); forecastList.Where(a => a.ObsForecast.ZoneName == zoneName).ToList().ForEach(a => { dataList.Add(new ForecastPoint(1, a.ObsForecast.Hr1)); dataList.Add(new ForecastPoint(2, a.ObsForecast.Hr2)); dataList.Add(new ForecastPoint(3, a.ObsForecast.Hr3)); dataList.Add(new ForecastPoint(4, a.ObsForecast.Hr4)); dataList.Add(new ForecastPoint(5, a.ObsForecast.Hr5)); dataList.Add(new ForecastPoint(6, a.ObsForecast.Hr6)); dataList.Add(new ForecastPoint(7, a.ObsForecast.Hr7)); dataList.Add(new ForecastPoint(8, a.ObsForecast.Hr8)); dataList.Add(new ForecastPoint(9, a.ObsForecast.Hr9)); dataList.Add(new ForecastPoint(10, a.ObsForecast.Hr10)); dataList.Add(new ForecastPoint(11, a.ObsForecast.Hr11)); dataList.Add(new ForecastPoint(12, a.ObsForecast.Hr12)); dataList.Add(new ForecastPoint(13, a.ObsForecast.Hr13)); dataList.Add(new ForecastPoint(14, a.ObsForecast.Hr14)); dataList.Add(new ForecastPoint(15, a.ObsForecast.Hr15)); dataList.Add(new ForecastPoint(16, a.ObsForecast.Hr16)); dataList.Add(new ForecastPoint(17, a.ObsForecast.Hr17)); dataList.Add(new ForecastPoint(18, a.ObsForecast.Hr18)); dataList.Add(new ForecastPoint(19, a.ObsForecast.Hr19)); dataList.Add(new ForecastPoint(20, a.ObsForecast.Hr20)); dataList.Add(new ForecastPoint(21, a.ObsForecast.Hr21)); dataList.Add(new ForecastPoint(22, a.ObsForecast.Hr22)); dataList.Add(new ForecastPoint(23, a.ObsForecast.Hr23)); dataList.Add(new ForecastPoint(24, a.ObsForecast.Hr24)); }); ObsLoadChartData = dataList; RaisePropertyChanged("ObsLoadChartData"); if (!(obsLoadForecasts.Exists(a => a.ObsForecast.ZoneName.Contains("Interchange")))) { try { //Peak Load Forecast values defined maxRTOvalue = dataList.Max(ForecastPoint => ForecastPoint.Value); maxRTOhour = dataList.FindIndex(ForecastPoint => ForecastPoint.Value == maxRTOvalue); maxRTOhour = maxRTOhour + 1; } catch { Log("Unable to determine Peak Load Forecast "); maxRTOvalue = 0; maxRTOhour = 0; maxRTOhour = 0; } } } public class ForecastPoint : DependencyObject { public ForecastPoint(int hour, decimal value) { Hour = hour; Value = value; } public static readonly DependencyProperty _hour = DependencyProperty.Register("Hour", typeof(Int32), typeof(ForecastPoint)); public Int32 Hour { get { return (int)GetValue(_hour); } set { SetValue(_hour, value); } } public static readonly DependencyProperty _value = DependencyProperty.Register("Value", typeof(decimal), typeof(Point)); public decimal Value { get { return (decimal)GetValue(_value); } set { SetValue(_value, value); } } }
代碼在Shell.x反洗錢:
<me:LoadChart x:Name="MyLoadChart" SnapsToDevicePixels="True" />
代碼在我LoadChart.xaml:
<UserControl x:Class="ProbeCTO.LoadChart" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:chartingPrimitives="clr-namespace:System.Windows.Controls.DataVisualization.Charting.Primitives;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:me="clr-namespace:ProbeCTO" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <UserControl.Resources> <Style TargetType="{x:Type charting:Chart}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type charting:Chart}"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <datavis:Title Content="{TemplateBinding Title}" HorizontalAlignment="Left" Margin="20 0" FontWeight="Bold" Foreground="{StaticResource DefaultButtonBrush}" Style="{TemplateBinding TitleStyle}" /> <!-- Use a nested Grid to avoid possible clipping behavior resulting from ColumnSpan+Width=Auto --> <Grid Grid.Row="1" Margin="0,15,0,15"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <chartingPrimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}"> <Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" /> <Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1 0 0 1" /> </chartingPrimitives:EdgePanel> </Grid> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources> <Grid> <charting:Chart x:Name="MyChart" Title="{Binding ObsSelectedLoadForecast.ObsForecast.ZoneName, TargetNullValue=RTO, FallbackValue=RTO}" Grid.Row="1" SnapsToDevicePixels="True" Foreground="#DDD" BorderThickness="0"> <charting:Chart.PlotAreaStyle> <Style TargetType="{x:Type Grid}"> <Setter Property="Background" Value="{x:Null}" /> </Style> </charting:Chart.PlotAreaStyle> <charting:Chart.Axes> <charting:LinearAxis Orientation="X" ShowGridLines="False" Interval="1" /> <charting:LinearAxis Orientation="Y" ShowGridLines="False" /> </charting:Chart.Axes> <charting:Chart.Series> <charting:AreaSeries ItemsSource="{Binding ObsLoadChartData}" IndependentValuePath="Hour" DependentValuePath="Value"> </charting:AreaSeries> <charting:LineSeries ItemsSource="{Binding ObsLoadChartData}" IndependentValuePath="Hour" DependentValuePath="Value"> </charting:LineSeries> </charting:Chart.Series> </charting:Chart> </Grid>
非常感謝你 – someone
@someone如果這個答案解決了你的問題,你應該把它標記爲正確的答案。 –