我正在做 dotnet 上传的 .NET MAUI 初学者教程系列,我的相对绑定不起作用,按照他们所说的做了一切,但错误不断弹出。
我正在尝试将SwipeItem“Delete”绑定到DeleteCommand [RelayCommand](我正在使用CommunityToolkit.Mvvm),Delete函数位于我的MainViewModel.cs中
我不断收到下一个错误:“绑定:在“System.String”上找不到属性“DeleteCommand”。 我试图找到其他人发布有关此错误的任何内容,但一无所获。
这是我的 MainPage.xaml 文件,错误发生在:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp2.MainPage"
xmlns:viewmodel="clr-namespace:MauiApp2.ViewModel"
x:DataType="viewmodel:MainViewModel"
x:Name="mainPageRef">
<Grid RowDefinitions="100, Auto, *"
ColumnDefinitions=".75*, .25*"
Padding="10"
RowSpacing="10"
ColumnSpacing="10">
<Image Grid.ColumnSpan="2"
Source="mylogo.png"
BackgroundColor="Transparent"/>
<Entry Placeholder="Enter task"
Text="{Binding Text}"
Grid.Row="1"/>
<Button Text="Add"
Command="{Binding AddCommand}"
Grid.Row="1"
Grid.Column="1"/>
<CollectionView Grid.Row="2" Grid.ColumnSpan="2"
ItemsSource="{Binding Items}">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="{x:Type x:String}">
<SwipeView>
<SwipeView.RightItems>
<SwipeItems>
<SwipeItem Text="Delete"
BackgroundColor="Red"
Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodel:MainViewModel}}, Path=DeleteCommand}"
CommandParameter="{Binding .}"/>
</SwipeItems>
</SwipeView.RightItems>
<Grid Padding="0, 5">
<Border>
<Label Text="{Binding .}"
FontSize="24"/>
</Border>
</Grid>
</SwipeView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</Grid>
</ContentPage>
我也尝试添加 AncestorLevel 属性,但也没有帮助
这是我的 MainViewModel.cs:
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
namespace MauiApp2.ViewModel;
public partial class MainViewModel : ObservableObject
{
public MainViewModel()
{
Items = new ObservableCollection<string>();
System.Diagnostics.Debug.WriteLine("MainViewModel constructor called");
}
[ObservableProperty]
ObservableCollection<string> items;
[ObservableProperty]
string text;
[RelayCommand]
void Add()
{
if (string.IsNullOrWhiteSpace(Text))
return;
Items.Add(Text);
//add our item
Text = string.Empty;
}
[RelayCommand]
void Delete(string s)
{
Console.WriteLine("IN THE DELETE FUNCTION");
if(Items.Contains(s))
Items.Remove(s);
}
}
感谢您的宝贵时间!
我刚刚创建了另一个项目,将代码从原始项目复制到新项目,一切正常。