我在MongoLab上设置了一个数据库,该数据库被查询并解析为模型。该模型中的集合又与数据网格绑定。但是当我查询数据库时,网格上显示的唯一数据就是文档的对象ID。
为了调试问题,我使用每个字段的常量数据初始化列表,绑定工作,填充网格上的每个字段。
然后引导我检查我如何将数据映射到模型。
然后我逐步介绍了从服务器查询返回的Observable集合的内容。
这表明正在返回所有数据,但所有模型字段都为空。而是创建一组客户,并在不同的客户对象中填充字段。
有谁知道如何进一步调试?
首先,我检查了从查询返回的集合的内容。其中显示了空模型字段和客户数组:
然后我检查了customers
Customer数组(已填充)的内容:
文档JSON在MongoLab中定义,然后映射到应用CustomerModel中的CustomerCollection:
http://hastebin.com/ipatatoqif.pl
CustomerModel:
public class CustomerModel : INotifyPropertyChanged
{
private ObjectId id;
private string firstName;
private string lastName;
private string email;
[BsonElement]
ObservableCollection<CustomerModel> customers { get; set; }
/// <summary>
/// This attribute is used to map the Id property to the ObjectId in the collection
/// </summary>
[BsonId]
public ObjectId Id
{
get
{
return id;
}
set
{
id = value;
}
}
[BsonElement("firstName")]
public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
RaisePropertyChanged("FirstName");
}
}
[BsonElement("lastName")]
public string LastName
{
get
{
return lastName;
}
set
{
lastName = value;
RaisePropertyChanged("LastName");
}
}
[BsonElement("email")]
public string Email
{
get
{
return email;
}
set
{
email = value;
RaisePropertyChanged("Email");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这是在网格上显示的数据,仅显示当前的ObjectID:
答案 0 :(得分:1)
我不会直接在MongoDB中存储ObservableCollection<T>
。
相反,我会在MongoDB中存储List<T>
。
为什么呢? ObservableCollection<T>
是一个特定于WPF的数据结构,除非write a custom serializer,否则可能无法使用MongoDB。
如果您使用的是MVVM,则需要将MongoDB中存储的数据与ViewModel分开。我建议从MongoDB中检索数据,然后使用AutoMapper
或ExpressMapper
等映射器将其映射到ViewModel。