1

C# の学習プロジェクトとして、オンライン ブラウザー ゲーム用の WPF クライアントを作成しています。ウェブサイトに表示されているデータをインポートしてモデルに保存し、バインディングを介して表示したいと考えています。通常、私はこの方法でそれを行います:

HttpWebRequest を使用してデータを取得し、Regex を実行して必要なデータを受信し、モデルでさらに使用できるように保存します。テーブル内の車とそのプロパティのリストであるこの特定の項目では、1 つの Regex クエリで取得できる車の 6 つのプロパティが必要です。

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

その文字列から 42 個の一致が得られます。つまり、入力する CarModel が 7 個あるということです。ここで、モデルを埋めたい場合は、次のようにします。

            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 の一致、つまり 2 台の車を取得したとします。carInfos[0].value はプレートになり、carInfos[6].value にもプレートが含まれます。これらのモデルがそれに応じて満たされるような方法で結果をループするにはどうすればよいですか?

4

1 に答える 1

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)

于 2013-03-30T15:14:34.957 に答える