在Windows Phone中绑定XAML中的可观察集合
在简单的Windows Phone 7页面中,以声明方式设置数据透视项中包含的列表框的ItemsSource时遇到问题。我可以在代码隐藏中成功设置ItemsSource 下面是包含我要绑定到的ObservableCollection的类的一个片段:在Windows Phone中绑定XAML中的可观察集合,xaml,data-binding,windows-phone-7,observablecollection,Xaml,Data Binding,Windows Phone 7,Observablecollection,在简单的Windows Phone 7页面中,以声明方式设置数据透视项中包含的列表框的ItemsSource时遇到问题。我可以在代码隐藏中成功设置ItemsSource 下面是包含我要绑定到的ObservableCollection的类的一个片段: sealed class Database : INotifyPropertyChanged { //Declare Instance private static readonly Database instance = new D
sealed class Database : INotifyPropertyChanged
{
//Declare Instance
private static readonly Database instance = new Database();
//Private Constructor
private Database() { }
//The entry point into this Database
public static Database Instance
{
get
{
return instance;
}
}
#region Collections corresponding with database tables
public ObservableCollection<Category> Categories { get; set; }
public ObservableCollection<CategoryType> CategoryTypes { get; set; }
但是,除非我在代码中显式设置ItemsSource,否则绑定无法工作,如下所示:
this.DataContext = Database.Instance;
CategoriesListBox.ItemsSource = Database.Instance.Categories;
我知道我应该能够以声明的方式完成这一切,但是我尝试了许多不同的方式以声明的方式设置ItemsSource(除了我上面详细介绍的内容之外),但都没有效果
有人能帮我吗
进一步信息:运行时的输出窗口显示以下内容:System.windows.Data错误:无法从“BTT.PimpointTime.WinPhone.Database”(类型“BTT.PimpointTime.WinPhone.Database”)获取“Categories”值(类型“System.Collections.ObjectModel.ObservableCollection”“1[BTT.PimpointTime.Entities.Category]”)。BindingExpression:Path='Categories'DataItem='BTT.PinPointTime.WinPhone.Database'(HashCode=99825759);目标元素是'System.Windows.Controls.ListBox'(Name='classifieslistbox');目标属性是'ItemsSource'(类型'System.Collections.IEnumerable')。。System.MethodAccessException:尝试访问方法失败:BTT.PinPointTime.WinPhone.Database.get_Categories()
在System.Reflection.RuntimeMethodInfo.InternalInvoke(对象obj,BindingFlags invokeAttr)尝试实例化构造函数代码中的类别
private Database()
{
Categories = new ObservableCollection<Category>();
}
private数据库()
{
类别=新的ObservableCollection();
}
现在,您的绑定将正确地了解集合。尝试在构造函数代码中实例化类别
private Database()
{
Categories = new ObservableCollection<Category>();
}
private数据库()
{
类别=新的ObservableCollection();
}
现在,您的绑定将正确地了解集合。我发现问题与我的数据库类的访问级别有关。当我将其从“密封”更改为“公共密封”时,数据绑定工作正常
public sealed class Database : INotifyPropertyChanged
{
//Declare Instance
private static readonly Database instance = new Database();
//Private Constructor
private Database()
{
//Categories = new ObservableCollection<Category>();
}
//more code here....
公共密封类数据库:INotifyPropertyChanged
{
//声明实例
私有静态只读数据库实例=新数据库();
//私有构造函数
专用数据库()
{
//类别=新的ObservableCollection();
}
//更多代码在这里。。。。
我发现问题与我的数据库类的访问级别有关。当我将其从“密封”更改为“公共密封”时,数据绑定工作正常
public sealed class Database : INotifyPropertyChanged
{
//Declare Instance
private static readonly Database instance = new Database();
//Private Constructor
private Database()
{
//Categories = new ObservableCollection<Category>();
}
//more code here....
公共密封类数据库:INotifyPropertyChanged
{
//声明实例
私有静态只读数据库实例=新数据库();
//私有构造函数
专用数据库()
{
//类别=新的ObservableCollection();
}
//更多代码在这里。。。。
Hmm我看到您正在实现INotifyPropertyChanged
,但没有使用它。您应该在get like so中添加NotifyPropertyChanged(“类别”);
:
private ObservableCollection<Category> _categories
public ObservableCollection<Category> Categories {
get{return _categories;}
set
{
if (_categories == value) return;
_categories= value;
NotifyPropertyChanged("Categories");
}
}
private observedcollection\u类别
公共可观测集合类别{
获取{return\u categories;}
设置
{
if(_categories==value)返回;
_类别=价值;
通知财产变更(“类别”);
}
}
当您想向类别集合添加数据时,请使用属性而不是成员。它在我的代码中起作用,希望这能有所帮助。Hmm我看到您正在实现
INotifyPropertyChanged
,但没有使用它。您应该在get like so中添加NotifyPropertyChanged(“Categories”);
:
private ObservableCollection<Category> _categories
public ObservableCollection<Category> Categories {
get{return _categories;}
set
{
if (_categories == value) return;
_categories= value;
NotifyPropertyChanged("Categories");
}
}
private observedcollection\u类别
公共可观测集合类别{
获取{return\u categories;}
设置
{
if(_categories==value)返回;
_类别=价值;
通知财产变更(“类别”);
}
}
当您要向类别集合添加数据时,请使用属性而不是成员。它在我的代码中起作用,希望这有帮助。当您说“绑定不起作用”时,你是什么意思?你什么都没有?你有异常吗?调试输出窗口中有任何消息吗?@madd0我没有异常,但是输出窗口确实显示了一些细节-当你说“绑定不工作”时,已将其添加到我的帖子中,你的意思是什么?你什么都没有?你有异常吗?调试输出窗口中有任何消息吗?@madd0我没有异常,但是输出窗口确实显示了一些细节-已将其添加到我的帖子中,但不起作用,但是我在运行时从输出窗口添加了一些额外的信息,这些信息可能有助于解决不起作用的问题,h不过,我在运行时从输出窗口添加了一些额外的信息,这可能会有所帮助