秒表的数据绑定问题已过

Mec*_*h0z 6 .net c# wpf binding

我正在尝试创建一个类,当它启动时,它会启动一个秒表,并且所有时间都将经过的时间写入本地变量 Elapsed,我有一个数据绑定到的 Listview。但是当我使用这段代码时,Listview 只显示 00:00:00.00000001 并且永远不会改变。类的代码是:

命名空间 project23
{
    公共类 ActiveEmployee
    {
        公共 int EmpID { 获取;放; }
        公共字符串 EmpName { 获取;放; }
        私人日期时间日期;
        私人 BackgroundWorker 工作者;
        公共秒表 sw;

        公共 ActiveEmployee(int empID,字符串 empName)
        {
            日期 = DateTime.Now;
            worker = new BackgroundWorker();
            worker.DoWork += 后台工作;
            worker.WorkerReportsProgress = true;

            worker.RunWorkerAsync();
        }

        私人时间跨度已过;
        公共时间跨度已过
        {
            得到 { 返回已过;}
            放
            {
                已用时间 = 值;
                NotifyPropertyChanged("Elapsed");
            }
        }

        私有无效BackgroundWork(对象发送者,DoWorkEventArgs args)
        {
            sw = 新秒表();
            sw.开始();
            如果是真的)
            {
                Elapsed = sw.Elapsed;
            }
        }

        公共事件 PropertyChangedEventHandler PropertyChanged;

        私有无效 NotifyPropertyChanged(字符串信息)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
}

现在它可以使用计时器代替

使用系统;
使用 System.ComponentModel;
使用 System.Timers;

命名空间 Eksamen_Januar_2011 { 公共类 ActiveEmployee : INotifyPropertyChanged { 公共 int EmpID { 获取;放; } 公共字符串 EmpName { 获取;放; } 私人日期时间开始日期; 私人 BackgroundWorker 工作者; 私人定时器定时器;

public ActiveEmployee(int empID, string empName) { startDate = DateTime.Now; worker = new BackgroundWorker(); worker.DoWork += BackgroundWork; timer = new Timer(1000); timer.Elapsed += TimerElapsed; worker.RunWorkerAsync(); } private TimeSpan elapsed; public TimeSpan Elapsed { get { return elapsed; } set { elapsed = value; NotifyPropertyChanged("Elapsed"); } } private void BackgroundWork(object sender, DoWorkEventArgs args) { timer.Start(); } private void TimerElapsed(object sender, ElapsedEventArgs e) { Elapsed = DateTime.Now - startDate; } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } }
Run Code Online (Sandbox Code Playgroud)

}

Jos*_*shL 5

您需要实现 INotifyPropertyChanged 接口。将您的类声明修改为:

public class Employee : System.ComponentModel.INotifyPropertyChanged
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx