2013-03-28 3 views
1

데이터 로깅 응용 프로그램의 텍스트 파일을 통해 읽고있는 다양한 값 목록이 있습니다. 최종 목표는 각 값에 대한 열이있는 데이터 격자를 가지는 것입니다. 다음은 내가하려고하는 것에 대한 기본 개요입니다.WPF : 다양한 목록의 DataGrid에 추가

1.) 텍스트 파일을 읽고 새 dataFile 클래스가 만들어집니다 -이 클래스는 텍스트 파일의 다양한 열을 구문 분석하고 각 변수에 대한 부동 소수점 형.

2) 데이터 파일 클래스는이 목록

3.

) 내 데이터 그리드에이 목록을 추가 할하지만이 작업을 수행하는 방법에 대한 정보를 찾을 수 없어 각을 반환하는 메서드가 포함되어 있습니다.

예 : runOne는 fataFile이며, getRPM()가 수레의 목록을 반환 어디 ... 다음 코드 줄을 사용 채우기 위해

dataGrid1.ItemsSource = runOne.getRPM(); 

을 하나의 열을 얻을 수 있습니다.

여러 개의 목록 (예 :

dataGrid1.ItemsSource = runOne.getRPM(); 
dataGrid1.ItemsSource = runOne.getPower(); 

dataGrid의 첫 번째 열만 채워집니다.

<DataGrid AutoGenerateColumns="False" Height="305" HorizontalAlignment="Left" Margin="153,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="454"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="RPM" /> 
      <DataGridTextColumn Header="Flywheel Torque" /> 
      <DataGridTextColumn Header="TorqM" /> 
      <DataGridTextColumn Header="TorqS" /> 
      <DataGridTextColumn Header="Power (HP)" /> 
      <DataGridTextColumn Header="Flywheel Power" /> 
      <DataGridTextColumn Header="Temp" /> 
     </DataGrid.Columns> 
    </DataGrid> 

내가 개별 목록의 항목을 기준으로 각 열을 채울 수있는 방법이 있나요 ... 난 이미 데이터 그리드의 열을 생성하고 아래의 XAML 코드는? 모든 목록 (List of Lists)을 반환하는 메서드를 작성하고 작동하도록 시도했지만 시도하지 않았습니다.

모든 제안/아이디어를 높이 평가합니다.

답변

0

관찰 가능한 컬렉션을 만들고 RPM 및 전원 (ObservableCollection<RpmPower>)에 대한 두 가지 속성이있는 새 클래스로 채우십시오. 그런 다음 그리드를 새 컬렉션에 바인딩 할 수 있습니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 

namespace Test 
{ 
    public class RpmPowerModel : INotifyPropertyChanged 
    { 
     #region Properties 

     public int Rpm 
     { 
      get { return _rpm; } 
      set 
      { 
       if (_rpm != value) 
       { 
        _rpm = value; 
        RaisePropertyChanged("Rpm"); 
       } 
      } 
     } 

     private int _rpm; 

     public int Power 
     { 
      get { return _power; } 
      set 
      { 
       if (_power != value) 
       { 
        _power = value; 
        RaisePropertyChanged("Power"); 
       } 
      } 
     } 

     private int _power; 

     #endregion 

     #region Implementation of INotifyPropertyChanged 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected void RaisePropertyChanged(string propertyName) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #endregion 

     public static List<RpmPowerModel> LoadItems(List<int> rpms, List<int> powers) 
     { 
      if (rpms == null) 
      { 
       throw new ArgumentNullException("rpms"); 
      } 

      if (powers == null) 
      { 
       throw new ArgumentNullException("powers"); 
      } 

      var result = new List<RpmPowerModel>(Math.Max(rpms.Count, powers.Count)); 

      for (int i = 0; i < Math.Max(rpms.Count, powers.Count); i++) 
      { 
       var model = new RpmPowerModel 
       { 
        Rpm = i < rpms.Count ? rpms[i] : 0, 
        Power = i < powers.Count ? powers[i] : 0 
       }; 

       result.Add(model); 
      } 

      return result; 
     } 
    } 
} 
+0

관찰 가능 모음을 사용하는 것 외에 다른 방법으로 만들 수 있습니까? 나는 그들을 사용하는 방법을 알아낼 수 없다. – Bubo

+0

예, List 대신 ObservableCollection을 생성하고 사용할 수있다. 여기서 RpmPower는 RPM 및 Power 속성을 가진 클래스이다. – Alexey

+0

하지만 이미 그 속성을 가진 클래스가 있습니다. 클래스는 데이터 격자에 표시하고자하는 다양한 목록을 반환 할 수 있습니다. 오해가 생기면 사과드립니다. 예를 들어, runOne.getRPM()은 RPM 값 목록 을 반환합니다. runOne.getPower()는 전력 값 목록을 반환합니다 – Bubo