c# – 添加到ObservableCollection – 对象引用错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 添加到ObservableCollection – 对象引用错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3945字,纯文字阅读大概需要6分钟。
内容图文
![c# – 添加到ObservableCollection – 对象引用错误](/upload/InfoBanner/zyjiaocheng/820/c16d7c1345dc4c53bf47c08c97be1e6c.jpg)
我正在使用绑定的ViewModel创建一个带有Xamarin Forms的秒表类型应用程序.在代码中,我想要完成的是当在View中按下“Lap”按钮时会触发一个Command,它运行一个方法,该方法应该向对象添加一堆细节,然后将其添加到ObservableCollection中.
我遇到的问题是,“添加”按钮实际上并没有添加到集合中.
我收到错误“System.NullReferenceException:对象引用未设置为对象的实例.”在这条线上
RaceTimings.Add(lap);
我究竟做错了什么?完整代码如下.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Timers;
using System.Windows.Input;
using TechsportiseApp.Models;
using Xamarin.Forms;
namespace TechsportiseApp.ViewModels
{
public class TimerViewModel : INotifyPropertyChanged
{
public Timer myTimer = new Timer();
public ICommand StartTimerCommand { get; set; }
public ICommand LapCommand { get; set; }
public TimerViewModel()
{
StartTimerCommand = new Command(StartTimer);
LapCommand = new Command(LapButton);
LapPosition = 1;
}
//TimeSpan _elapsedTime;
//public TimeSpan ElapsedTime
//{
// get {
// return _elapsedTime;
// }
// set
// {
// if (_elapsedTime == value)
// return;
// _elapsedTime = value;
// OnPropertyChanged("ElapsedTime");
// }
//}
string _elapsedTime;
public String ElapsedTime
{
get
{
//if(ElapsedTime == "")
//{
// _elapsedTime = "00:00:00.00";
//}
return _elapsedTime;
}
set
{
if (_elapsedTime == value)
return;
_elapsedTime = value;
OnPropertyChanged("ElapsedTime");
}
}
DateTime _currentTime;
public DateTime CurrentTime
{
get { return _currentTime; }
set
{
if (_currentTime == value)
return;
_currentTime = value;
OnPropertyChanged("CurrentTime");
}
}
DateTime _raceStartTime;
public DateTime RaceStartTime
{
get { return _raceStartTime; }
set
{
if (_raceStartTime == value)
return;
_raceStartTime = value;
OnPropertyChanged("StartTime");
}
}
DateTime _lapTime;
public DateTime LapTime
{
get { return _lapTime; }
set
{
if (_lapTime == value)
return;
_lapTime = value;
OnPropertyChanged("LapTime");
}
}
ObservableCollection<Timing> _timings;
public ObservableCollection<Timing> RaceTimings
{
get
{
//var sortedtimings = new ObservableCollection<Timing>(_timings.OrderBy(c => c.Position));
return _timings;
}
set
{
if (_timings != value)
{
_timings = value;
OnPropertyChanged("Timings");
}
}
}
int _lapPosition;
public int LapPosition
{
get { return _lapPosition; }
set
{
if (_lapPosition == value)
return;
_lapPosition = value;
OnPropertyChanged("LapPosition");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var changed = PropertyChanged;
if (changed != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
void StartTimer()
{
myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
myTimer.Interval = 10; // 1000 ms is one second
myTimer.Start();
RaceStartTime = DateTime.Now;
//ElapsedTime = myTimer.Elapsed.Milliseconds() += new ElapsedEventHandler(DisplayTimeEvent);
}
void DisplayTimeEvent(object source, ElapsedEventArgs e)
{
TimeSpan _elapsed;
_elapsed = e.SignalTime - RaceStartTime;
string hours = _elapsed.Hours.ToString().PadLeft(2, '0');
string minutes = _elapsed.Minutes.ToString().PadLeft(2, '0');
string seconds = _elapsed.Seconds.ToString().PadLeft(2, '0');
int _hundredths = _elapsed.Milliseconds / 10;
string hundredths = _hundredths.ToString().PadLeft(2,'0');
_elapsedTime = hours + ":" + minutes + ":" + seconds + "." + hundredths;
ElapsedTime = _elapsedTime;
OnPropertyChanged("ElapsedTime");
var RaceTimings = new ObservableCollection<Timing>();
}
void LapButton()
{
var lap = new Timing
{
Id = 0,
RaceId = 0,
StartTime = RaceStartTime,
EndTime = DateTime.Now,
Position = LapPosition,
Status = 0
};
RaceTimings.Add(lap);
LapPosition = LapPosition + 1;
var listcheck = RaceTimings.Count;
}
}
}
解决方法:
只需在构造函数中初始化您的_timings集合,如下所示:
RaceTimings = new ObservableCollection<Timing>();
或初始化字段:
ObservableCollection<Timing> _timings = new ObservableCollection<Timing>();
内容总结
以上是互联网集市为您收集整理的c# – 添加到ObservableCollection – 对象引用错误全部内容,希望文章能够帮你解决c# – 添加到ObservableCollection – 对象引用错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。