【发布时间】:2022-09-27 11:17:15
【问题描述】:
选中复选框时,我试图从列表中删除一个项目。我正在使用 input.kit 作为复选框。我已经能够使用图像按钮将它们删除,但不能使用此复选框。这是 xaml:
<ListView ItemsSource=\"{Binding TodoListItems}\" x:Name=\"todoList\">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<FlexLayout JustifyContent=\"SpaceBetween\" Padding=\"20,0\">
<ContentView>
<FlexLayout AlignItems=\"Center\" >
<input:CheckBox IsChecked=\"{Binding Complete}\"
CheckChangedCommand=\"{Binding Path=BindingContext.CompleteTodoCommand, Source={x:Reference todoList}}\"
CommandParameter=\"{Binding .}\"
/>
<Label Text=\"{Binding TodoText}\" Padding=\"10,0,0,0\" FontSize=\"Large\"/>
</FlexLayout>
</ContentView>
<ImageButton Source=\"trash_icon.png\"
Command=\"{Binding Path=BindingContext.RemoveTodoCommand, Source={x:Reference todoList}}\"
CommandParameter=\"{Binding .}\"
Scale=\"1.2\" BackgroundColor=\"White\"
/>
</FlexLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这是 ViewModel:
{
private ObservableCollection<TodoItem> todoListItems;
public ObservableCollection<TodoItem> TodoListItems
{
get { return todoListItems; }
set { todoListItems = value; }
}
private ObservableCollection<TodoItem> completedTodoItems;
public ObservableCollection<TodoItem> CompletedTodoItems
{
get { return completedTodoItems; }
set { completedTodoItems = value; }
}
public TodoListViewModel()
{
todoListItems = new ObservableCollection<TodoItem>();
TodoListItems.Add(new TodoItem(\"Walk the duggo\",false));
TodoListItems.Add(new TodoItem(\"Do the washing\",false));
TodoListItems.Add(new TodoItem(\"Brush off Cheeto dust\",false));
CompletedTodoItems = new ObservableCollection<TodoItem>();
}
public ICommand AddTodoCommand => new Command(AddTodoItem);
public string NewTodoInputValue { get; set; }
void AddTodoItem()
{
TodoListItems.Add(new TodoItem(NewTodoInputValue));
}
public ICommand RemoveTodoCommand => new Command(RemoveTodoItem);
void RemoveTodoItem(object o)
{
TodoItem todoItemBeingRemoved = o as TodoItem;
TodoListItems.Remove(todoItemBeingRemoved);
}
public ICommand CompleteTodoCommand => new Command(CompleteTodo);
void CompleteTodo(object o)
{
TodoItem todoItemCompleted = o as TodoItem;
todoListItems.Remove(todoItemCompleted);
CompletedTodoItems.Add(todoItemCompleted);
}
}
全视图模型。 我已经检查了 observable 集合是否已经初始化等等。此外,AddToDo 和 RemoveTodo 命令也有效。
0x1C in TodoAppXamarin.ViewModels.TodoListViewModel.CompleteTodo at C:\\Users\\johns\\source\\repos\\TodoAppXamarin\\TodoAppXamarin\\TodoAppXamarin\\ViewModels\\TodoListViewModel.cs:64,4
at C:\\Users\\johns\\source\\repos\\TodoAppXamarin\\TodoAppXamarin\\TodoAppXamarin\\ViewModels\\TodoListViewModel.cs(64)
那堆栈跟踪?
-
你能包括整个 ViewModel 吗? InvalidCasException 表示类型彼此不兼容,但是根据您提供的内容,我们无法知道
CompletedTodoItems是什么。 -
CompletedTodoItems的类型是什么? -
现在就在那里。 CompletedTodoItems 的类型是 ObservableCollection<TodoItem>
-
在不告诉我们异常提供的堆栈跟踪的情况下,您给我们留下了一个谜语来推测您的代码中的哪一行可能会引发此异常。不是我的那种演出,我不得不承认......
-
我们不知道“第 64 行”是什么
标签: c# xamarin.forms mvvm