2013-03-28 26 views
1

我有很多值列表,我正在通過文本文件讀取數據記錄應用程序。我的最終目標是爲每個值設置一個數據網格。這裏是我正在嘗試做什麼的基本輪廓...WPF:從各種列表添加到數據網格

1.)讀入文本文件並創建一個新的dataFile類 - 該類解析文本文件中的各個列,並創建List of爲每個變量浮動。

2)數據文件類包含的方法返回每個列表

3)我想將這些列表添加到我的數據網格,但我一直沒能找到關於如何做到這一點的信息。

例子:我可以得到一個欄,須填寫使用下面的代碼行...

dataGrid1.ItemsSource = runOne.getRPM(); 

凡runOne是fataFile和getRPM()返回花車的列表。

當我嘗試使用多個列表來完成此操作時,例如

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

只填充了dataGrid的第一列。我已經創建DataGrid的列,下面是XAML代碼...

<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> 

有沒有一種方法,我可以基於單個列表中的項目填寫每一列?我寫了一個方法來返回所有的列表(列表清單),我試圖讓它工作,但它沒有。

任何建議/想法,不勝感激。

回答

0

嘗試使用新類創建並填充可觀察集合,其中您將擁有RPM和Power的兩個屬性(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

但我已經有了這些屬性的類,該類可以返回我想要在數據網格上顯示的各種列表,如果我誤解了某些內容,我表示歉意,ex - runOne.getRPM()返回RPM值的列表而runOne.getPower()返回一個功率值列表 – Bubo

相關問題