无法将类型 'MS.Internal.NamedObject' 的对象强制转换为类型 'Task_Board.Models.TaskModel'



我正在为我的老板开发一个程序,当他来到IT办公室时,该程序会为他创建一个显示器,让他在监视器上查看,这样他就可以一眼快速看到我们在做什么(类似于scrum板(。所以"Task_Board.Models.TaskModel"是我创建的一个类。我遇到的问题是从数据库中删除任务。我在代码的另一部分中使用它来删除特定的任务,但当我试图通过将此逻辑放入循环来删除所有任务时,它会抛出上面的错误。以下是适用于特定实体的方法:

private void DoneDelete_Click(object sender, RoutedEventArgs e)
{
try
{
var item = (TaskModel)DoneList.SelectedValue;
TaskItem task = NinjectRepo.Instance.TaskItemRepo.Get(item.TaskId);
NinjectRepo.Instance.TaskItemRepo.Remove(task);
Update();
}
catch (Exception a)
{
MessageBox.Show("System Message: " + a.Message, "ERROR");
}
}

这就是最初的麻烦代码:

for (int i = ToDoList.Items.Count - 1; i >= 0; i--)
{
var item = (TaskModel)ToDoList.Items.GetItemAt(i);
TaskItem task = NinjectRepo.Instance.TaskItemRepo.Get(item.TaskId);
NinjectRepo.Instance.TaskItemRepo.Remove(task);
}

我试图在下面的代码中以不同的方式设置选定的值,但它抛出了相同的错误。

for (int i = ToDoList.Items.Count - 1; i >= 0; i--)
{
ToDoList.SelectedValue = ToDoList.Items.GetItemAt(i);
var item = (TaskModel)ToDoList.SelectedValue;
TaskItem task = NinjectRepo.Instance.TaskItemRepo.Get(item.TaskId);
NinjectRepo.Instance.TaskItemRepo.Remove(task);
}

我不明白有效的方法和无效的方法之间发生了什么,因为它基本上是完全相同的逻辑,不是吗?

编辑:这就是我填充列表的方式:

items = NinjectRepo.Instance.TaskItemRepo.Get().OrderBy(q=>q.Rank).AsQueryable();
//update ToDo Lists
var tdlist = await items.Select(q => new TaskModel { TaskId = q.TaskId, Status = 
q.Status, Rank = q.Rank, Type = q.Type.Name, Assigned = q.Date, Description = q.Description })
.Where(items => items.Status.ToLower() == ToDoStatus.ToLower()).ToListAsync();
ToDoList.ItemsSource = tdlist;
ToDoList.Columns[1].Visibility = Visibility.Hidden;
ToDoList.Columns[4].Visibility = Visibility.Hidden;

我发现我遇到的问题实际上是由自动添加到DataGrid末尾的NewItemPlaceholder引起的。因此,当我试图循环浏览DataGrid的项时,当涉及到将NewItemPlaceholder转换为TaskItem时,它无法完成,因为行中没有数据。因此,为了解决这个问题,我将DataGrid更改为只读,以便去掉多余的行。

相关内容

最新更新