我有一个关于更新可观察集合的问题。我正在使用 Visual Studio 2010 c#。我是一个相对新手,可能犯了一个灾难性的错误,所以很抱歉开始。基本上,当我在 Windows 7 上运行此代码时,此代码运行良好,但在 Windows 8 上,我得到了NullReferenceException
PropertyChanged。
我有一个包含 Tasks 可观察集合的类。
任务.cs
namespace TimeLocation
{
public static class TStatic
{
static TStatic()
{
TaskList = new ObservableCollection<Tasks>();
}
public static ObservableCollection<Tasks> TaskList { set; get; }
}
public class Tasks : INotifyPropertyChanged
{
public int taskID;
public string taskname;
public Tasks(string tname)
{
this.taskname = tname;
}
public string Taskname
{
get { return taskname; }
set
{
if (value != "")
{
taskname = value; OnPropertyChanged("Taskname");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string info)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(info));
}
}
}
我在 MainWindow 中有一个绑定到 Tasks 的网格,并且通过PropertyChanged
上面的更新更新很好。用户还可以通过用鼠标拖动来编辑任务。我希望它也能更新网格和可观察的集合。在 Windows 7 上运行时,这有效,但在 Windows 8 上失败。
在 mainwindow.xaml 的代码后面
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = TStatic.TaskList;
}
private void dCanvas_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
Tasks t = _selectedtask;
t.taskname = "Test";
PropertyChanged(t, new PropertyChangedEventArgs("Taskname"));
}
}
我确信任务名称已更新,因为当我将其保存到文件并添加手表时名称已更改。
_selectedtask
已通过选择网格行填充了一项任务。
在 Windows 8 中,该行
PropertyChanged(t, new PropertyChangedEventArgs("Taskname"));
返回空错误。在 Windows 7 中,它不为空并正确更新网格。