0

私は次のクラスを持っています:

public abstract class BaseGridViewModel 
{
    protected BaseGridViewModel() 
    {
        Timer = new List<long>();
    }
    public List<long> Timer { get; set; }
}
public class CityReportViewModel : BaseGridViewModel 
{
    public IEnumerable<City.Grid> Grid { get; set; }
}

私のアクションコードでは、次のようなタイミングを実行しています。

        var vm = new CityReportViewModel();
        var sw = Stopwatch.StartNew();
        try {
            //
            vm.Timer.Add(sw.ElapsedMilliseconds);
            //
            vm.Timer.Add(sw.ElapsedMilliseconds);
            //
            // Lots more vm.Timer.Add lines ...
        } catch (Exception e) {
            log(e);
        } finally {
            sw.Stop();
        }

多くのタイミングを実行するため、コントローラーでvm.Timer.Addコードを何度も繰り返します。

ViewModelsに変更を加えることで、タイマーのコーディングを簡素化する方法はありますか。私が考えているのは、タイマーをViewModelsのフィールドとして設定してから、新しいタイミングイベントを記録することをViewModelに通知する方法があることです。

4

1 に答える 1

1

要件についてはよくわかりませんが、オブザーバーが必要なようです。'BaseGridViewModel'は自分自身をオブザーバーに登録する場合があります。オブザーバーは、接続されているすべてのBaseGridViewModelのすべてのタイマーを更新するイベントを発生させる可能性があります。

編集

これは私が話していることです:

 public class TimerUpdateService
    {
        public TimerUpdateService()
        {
            // May create here a Stopwatch to measure your time.
        }

        private EventHandler<EventArgs> _updater;

        public void Register(BaseGridViewModel baseGridViewModel)
        {
            _updater += baseGridViewModel.timerUpdate_UpDateTimers;
        }

        public void Unregister(BaseGridViewModel baseGridViewModel)
        {
            _updater -= baseGridViewModel.timerUpdate_UpDateTimers;
        }

        /// <summary>
        /// Call this method to refresh all timers on the registred 'BaseGridViewModel'.
        /// </summary>
        public void UpdateAllViewModels()
        {
            EventHandler<EventArgs> handler = _updater;
            if (handler != null)
                handler(this, EventArgs.Empty);
        }

    }

    public abstract class BaseGridViewModel
    {
        protected BaseGridViewModel()
        {
            Timer = new List<long>();
        }

        public void timerUpdate_UpDateTimers(object sender, EventArgs e)
        {
            Timer.Add(e.elapsed);
        }

        public List<long> Timer { get; set; }

    }


    public class CityReportViewModel : BaseGridViewModel
    {
        public IEnumerable<City.Grid> Grid { get; set; }


    }

これがあなたに必要なものでありますように。上記のコードは単なる例です。

于 2012-09-12T15:09:25.410 に答える