C# Xamarin表单-未找到绑定属性

C# Xamarin表单-未找到绑定属性,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我按照教程创建模型和内容视图,但当我试图调整一些类名和模板以适应我正在做的项目时,我会遇到错误 但是,如果我完全从教程中复制代码,效果会很好。我在想我在这里遗漏了一些很小的东西,但我已经扫描了我的代码一个多小时了,一切看起来都很好 我收到的错误来自主页,2期 [0:] Binding: 'SelectedItem' property not found on 'testProject_xamarin.MainPage', target property: 'Xamarin.Forms.ListV

我按照教程创建模型和内容视图,但当我试图调整一些类名和模板以适应我正在做的项目时,我会遇到错误

但是,如果我完全从教程中复制代码,效果会很好。我在想我在这里遗漏了一些很小的东西,但我已经扫描了我的代码一个多小时了,一切看起来都很好

我收到的错误来自主页,2期

[0:] Binding: 'SelectedItem' property not found on 'testProject_xamarin.MainPage', target property: 'Xamarin.Forms.ListView.SelectedItem'
[0:] Binding: 'listBands' property not found on 'testProject_xamarin.MainPage', target property: 'Xamarin.Forms.ListView.ItemsSource'
我有一个简单的C级乐队

公共类频带
{
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共字符串说明{get;set;}
}
BandViewModel.cs

公共类BandViewModel
{
公共IList listBands{get;set;}
公共对象SelectedItem{get;set;}
公共BandViewModel()
{
listBands=新列表();
GenerateBandModel();
}
私有void GenerateBandModel()
{
string name=“Test”;
弦乐流派=“音乐”;
string description=“description”;
var波段=新波段()
{
Name=Name,
描述=描述,
流派
};
listBands.Add(band);
}
}
这是我的BandViewTemplate.xaml


最后是MainPage.xaml。。这就是抛出错误的地方


MainPage.xaml.cs

public分部类主页面:ContentPage
{
公共主页()
{
初始化组件();
this.BindingContext=新的BandViewModel();
}
}

我在我身边测试你的代码,但我没有问题,这是关于我项目的链接,你可以下载并测试它

关于你的代码,我有一些建议,你可以参考一下

首先,我建议您使用ObservableCollection()替换List(), 因为它继承了INotifyPropertyChanged接口,所以表示一个动态数据集合,在添加、删除项或刷新整个列表时提供通知

第二,您可以考虑使BoopVIEW模型继承IntIfyPrimTyType,因为SelectedItem属性在更改ListView selecteditem时需要更新数据。 我修改了你的代码,请看一下:

  public class BandViewModel: INotifyPropertyChanged
{
    public IList<Band> listBands { get; set; }
    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set
        {
            _SelectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }
    public BandViewModel()
    {
        listBands = new List<Band>(); 

        GenerateBandModel();
        //SelectedItem = listBands[0];
    }

    private void GenerateBandModel()
    {
        string name = "Test";
        string genre = "Music";
        string description = "Description";

        for(int i=0;i<10;i++)
        {
            var band = new Band()
            {
                Name = name + " "+i,
                Description = description+ " " +i,
                Genre = genre
            };
            listBands.Add(band);
        }

    }


    public event PropertyChangedEventHandler PropertyChanged;     
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
公共类BandViewModel:INotifyPropertyChanged
{
公共IList listBands{get;set;}
私有对象_SelectedItem;
公共对象SelectedItem
{
获取{return\u SelectedItem;}
设置
{
_选择editem=值;
RaisePropertyChanged(“SelectedItem”);
}
}
公共BandViewModel()
{
listBands=新列表();
GenerateBandModel();
//SelectedItem=listBands[0];
}
私有void GenerateBandModel()
{
string name=“Test”;
弦乐流派=“音乐”;
string description=“description”;

对于(inti=0;i我在我这边测试你的代码,但是我没有问题,这是关于我项目的链接,你可以下载并测试它

关于你的代码,我有一些建议,你可以参考一下

首先,我建议您使用ObservableCollection()替换List(), 因为它继承了INotifyPropertyChanged接口,所以表示一个动态数据集合,在添加、删除项或刷新整个列表时提供通知

第二,您可以考虑使BoopVIEW模型继承IntIfyPrimTyType,因为SelectedItem属性在更改ListView selecteditem时需要更新数据。 我修改了你的代码,请看一下:

  public class BandViewModel: INotifyPropertyChanged
{
    public IList<Band> listBands { get; set; }
    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set
        {
            _SelectedItem = value;
            RaisePropertyChanged("SelectedItem");
        }
    }
    public BandViewModel()
    {
        listBands = new List<Band>(); 

        GenerateBandModel();
        //SelectedItem = listBands[0];
    }

    private void GenerateBandModel()
    {
        string name = "Test";
        string genre = "Music";
        string description = "Description";

        for(int i=0;i<10;i++)
        {
            var band = new Band()
            {
                Name = name + " "+i,
                Description = description+ " " +i,
                Genre = genre
            };
            listBands.Add(band);
        }

    }


    public event PropertyChangedEventHandler PropertyChanged;     
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
公共类BandViewModel:INotifyPropertyChanged
{
公共IList listBands{get;set;}
私有对象_SelectedItem;
公共对象SelectedItem
{
获取{return\u SelectedItem;}
设置
{
_选择editem=值;
RaisePropertyChanged(“SelectedItem”);
}
}
公共BandViewModel()
{
listBands=新列表();
GenerateBandModel();
//SelectedItem=listBands[0];
}
私有void GenerateBandModel()
{
string name=“Test”;
弦乐流派=“音乐”;
string description=“description”;

对于(int i=0;iIs您的
MainPage
BindingContext
设置为您的
BandViewModel
,该ViewModel是否继承自
INotifyPropertyChanged
?@NickPeppers我已更新帖子,使其也包含我的MainPage.xaml.cs。您可以看到,我已将BindingContect设置为BandViewModel,但它没有继承自otifyPropertyChanged。示例也没有这个功能,这个链接看起来是一个非常糟糕的教程。我将引用一些实际的内容,无论是在没有
INotifyPropertyChanged
的情况下,您不能触发
OnPropertyChanged()
向绑定指示属性已更改。是否将
主页
BindingContext
设置为
BandViewModel
,并且该ViewModel是否继承自
INotifyPropertyChanged
?@NickPeppers我已更新