2017-11-27 19 views
1

파일에서 데이터를 수집하고 분석 한 다음 막대 차트로 데이터를 표시하는 프로그램을 만듭니다. WPF를 사용하고 있으므로 WPFToolkit 및 WPFToolkit.DataVisualization을 NuGet에서 가져 왔습니다. 매우 기본적인 XAML 집합을 사용하면 차트가 정상적으로 보이지만 축이 서로 바뀌어 가로 막대 차트가 나타나고 원하는 열을 표시 할 수 있습니다. 그래서 축을 교환했는데, 다음과 같은 오류 있어요 : 여기 WPF Toolkit : 축을 바꿀 때 막대 차트 축 오류

Assigned independent axis cannot be used. This may be due to an unset Orientation property for the axis.

내가 궁극적으로 바인딩 컬렉션에있는 항목의 정의로 시작, 내 코드입니다 :

간격 요약

뷰 모델

주에서

public class IntervalSummary 
{ 
    public IntervalSummary() 
    { 
     Results = new List<PollResult>(); 
    } 

    public DateTime PeriodStart { get; set; } 

    public DateTime PeriodEnd { get; set; } 

    public int MinimumItemCount { get; set; } 

    public int MaximumItemCount { get; set; } 

    public int AverageItemCount { get; set; } 

    public List<PollResult> Results { get; set; } 
} 

재산권 여기서는 Caliburn.Micro를 사용하고 있으므로 Set() 메서드는 기본적으로 속성 변경 알림뿐만 아니라 지원 필드에 값을 설정하는 방법을 모두 처리합니다.

public ObservableCollection<IntervalSummary> DataItems 
{ 
    get { return _dataItems; } 
    set { Set(ref _dataItems, value); } 
} 

차트 XAML

보기에 (이 질문에 관련이없는, 즉) 무관 XAML의 전체 더미있다 - 버튼, GroupPanels, 텍스트 상자 등 - 나는했습니다 있음 이미 테스트를 거쳐 작동합니다. 따라서 간결함을 위해 Window 정의 (XML 네임 스페이스 선언을 볼 수 있음)와 차트 선언에 불과합니다.

<Window x:Class="QueueMonitorAnalyzer.Views.ShellView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:QueueMonitorAnalyzer.Views" 
     xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit" 
     xmlns:datavis="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
     xmlns:toolkitEx="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit" 
     mc:Ignorable="d"> 
    <Border Padding="5"> 
     <Grid> 
      <datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue"> 
       <datavis:Chart.Series> 
        <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
            ItemsSource="{Binding Path=DataItems}" 
             DependentValueBinding="{Binding Path=AverageItemCount}" 
             IndependentValueBinding="{Binding Path=PeriodStart}"> 
         <datavis:BarSeries.DependentRangeAxis> 
          <datavis:LinearAxis Orientation="Y" Title="Item Count"/> 
         </datavis:BarSeries.DependentRangeAxis> 

         <datavis:BarSeries.IndependentAxis> 
          <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/> 
         </datavis:BarSeries.IndependentAxis> 
        </datavis:BarSeries> 
       </datavis:Chart.Series> 
      </datavis:Chart> 
     </Grid> 
    </Border> 
</Window> 

하루가 끝날 때의 목표는 간단히 기둥 형 차트를 작성하는 것입니다. <datavis:BarSeries.DependentRangeAxis><datavis:BarSeries.IndependentAxis>을 모두 버린 경우 가로형 차트가 표시되므로 축을 교체하고 원하는 방향으로 차트를 가져올 수 있도록 해당 차트 만 넣습니다.

다른 축 유형 (LinearAxis, DateTimeAxis, CategoryAxis)을 사용하는 것을 포함하여 전체적인 내용을 시도했습니다. 나는 또한 (단지 DependentRangeAxis를 떠나)을 IndependentAxis 정의를 덤핑했지만, 그것은 나에게 다음과 같은 오류 준 : 그 바탕으로

Assigned dependent axis cannot be used. This may be due to an unset Orientation property for the axis or a type mismatch between the values being plotted and those supported by the axis.

를, 내가 나서서 double 또는 floatIntervalSummary.AverageItemCount 데이터 유형을 변경했는데, 그있어 나도 아무데도.

내가 여기서 잘못하고있는 것을 누구든지 볼 수 있습니까?

마지막으로 이전에 XAML의 기본 집합이 차트를 올바르게 생성했지만 잘못 지정되었다고합니다. 이 XAML의 기본 세트가 있다는 것입니다 : 당신이 열을 표시하려면

<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue"> 
    <datavis:Chart.Series> 
     <datavis:BarSeries Name="BarSeries" Title="Items (Avg.)" 
         ItemsSource="{Binding Path=DataItems}" 
          DependentValueBinding="{Binding Path=AverageItemCount}" 
          IndependentValueBinding="{Binding Path=PeriodStart}"> 
     </datavis:BarSeries> 
    </datavis:Chart.Series> 
</datavis:Chart> 
+0

사용 'BarSeries' 대신'ColumnSeries'를 사용하십시오. – jsanalytics

+1

@jsanalytics 그것은 항상 정말 간단합니다.:) 감사! –

+0

신선한 눈이 보이지 않는 것은 ... : O) – jsanalytics

답변

1

, 당신은 사용해야합니다 ColumnSeries :

<datavis:Chart Name="Chart" Grid.Row="6" Title="Average Items in Queue"> 
    <datavis:Chart.Series> 
     <datavis:ColumnSeries Name="BarSeries" Title="Items (Avg.)" 
           ItemsSource="{Binding DataItems}" 
           DependentValuePath="AverageItemCount" 
           IndependentValuePath="PeriodStart"> 
      <datavis:ColumnSeries.DependentRangeAxis> 
       <datavis:LinearAxis Orientation="Y" Title="Item Count"/> 
      </datavis:BarSeries.DependentRangeAxis> 
       <datavis:ColumnSeries.IndependentAxis> 
       <datavis:DateTimeAxis Orientation="X" Title="Time Stamp"/> 
      </datavis:BarSeries.IndependentAxis> 
     </datavis:ColumnSeries> 
    </datavis:Chart.Series> 
</datavis:Chart> 

자세한 내용은 다음 문서를 참조하십시오 : https://www.codeproject.com/Articles/196502/WPF-Toolkit-Charting-Controls-Line-Bar-Area-Pie-Co

+0

그랬습니다. 'ColumnSeries' 타입을 잊어 버렸습니다. 갑자기 모든 것이 막 작동했습니다. :) 감사! –