1

我有各种值列表,我正在通过数据记录应用程序的文本文件读取这些值。我的最终目标是有一个数据网格,每个值都有一个列。这是我正在尝试做的基本概述......

1.) 读入一个文本文件并创建一个新的 dataFile 类 - 该类解析文本文件中的各个列并为每个变量创建浮点列表。

2.) dataFile 类包含返回每个列表的方法

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>

有没有办法可以根据单个列表中的项目填充每一列?我写了一个方法来返回所有列表(列表列表),我试图让它工作,但它没有。

非常感谢任何建议/想法。

4

1 回答 1

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;
        }
    }
}
于 2013-03-28T16:04:10.190 回答