C# Xamarin表单-未找到绑定属性
我按照教程创建模型和内容视图,但当我试图调整一些类名和模板以适应我正在做的项目时,我会遇到错误 但是,如果我完全从教程中复制代码,效果会很好。我在想我在这里遗漏了一些很小的东西,但我已经扫描了我的代码一个多小时了,一切看起来都很好 我收到的错误来自主页,2期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
[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我已更新