使用Regex.Matches </viewmodel>中的字符串填充列表<viewmodel>

时间:2013-03-30 14:38:59

标签: c# wpf linq

我正在为一个在线浏览器游戏编写一个WPF客户端作为C#的学习项目。我想导入网站上显示的数据,将其存储在模型中并通过绑定显示它。通常,我这样做:

使用HttpWebRequest检索数据,执行Regex以接收所需数据,然后将其存储以便在模型中进一步使用。有了这个特定的项目,一个表中的汽车及其属性的列表,我需要汽车的6个属性,我可以通过1个正则表达式查询检索:

var carInfos = Regex.Matches(HTMLBody, @"(?<== }"">).*(?=</td>)");

我从该字符串中获得42个匹配项,这意味着要填充7个CarModel。现在,如果我想填写模型,我会这样做:

            Cars.AllCars.Add(new CarModel{
                                             Plate = carInfos[0].Value,
                                             Type = carInfos[1].Value,
                                             NetWorth = int.Parse(carInfos[3].Value,
                                             etc, etc..

                                         });

这是我的CarModel:

  public class CarModel : INotifyPropertyChanged {
    public event PropertyChangedEventHandler PropertyChanged;
    private string _plate;

    public string Plate{
        get { return _plate; }
        set{
            if (value == _plate) return;
            _plate = value;
            OnPropertyChanged();
        }
    public string Type { get; set; }
    public int NetWorth { get; set; }
    public State CurrentWorth { get; set; }
    public State Location { get; set; }
    public int Condition { get; set; }
    public int Issues { get; set; }

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

我该如何动态完成此操作?每6个属性都是汽车类型,位置等。我希望最终可以绑定数百辆汽车。

比如说,我从正则表达式获得了12场比赛,即两辆赛车。 carInfos [0] .value将是一个Plate,而carInfos [6] .value也将包含一个盘子。如何以这样的方式遍历结果?相应地填充这些模型?

1 个答案:

答案 0 :(得分:2)

这应该对你有用 -

for (int index = 0; index < carInfos.Count/6; index++)
{
    int offest = index * 6;
    Cars.AllCars.Add(new CarModel{
                                 Plate = carInfos[0 + offest].Value,
                                 Type = carInfos[1 + offest].Value,
                                 NetWorth = int.Parse(carInfos[3 + offest].Value,
                                 etc, etc..    
                                 });
}

由于您总共有7个项目,这就是(42/6) = 7和项目偏移multiple of 6的原因,因此计算偏移(offest = index * 6)的逻辑