我正在为一个在线浏览器游戏编写一个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也将包含一个盘子。如何以这样的方式遍历结果?相应地填充这些模型?
答案 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)
的逻辑