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 代码。

有什么方法可以通过更改 ViewModel 来简化计时器编码。我正在考虑的事情是将计时器设置为 ViewModel 中的一个字段,然后通过某种方式告诉 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 回答