![](/img/trans.png)
[英]custom evaluation of columns in data grid and Binding of Observable Collection to a Column of DataGrid
[英]How to resolve null data on Observable Collection to data grid binding?
我已經在MongoLab上建立了一個數據庫,該數據庫被查詢並解析為Model。 該模型中的集合又綁定到數據網格。 但是,當我查詢數據庫時,網格上顯示的唯一數據是文檔的對象ID。
為了調試該問題,我使用每個字段的常量數據初始化了列表,並且綁定起作用,並填充了網格中的每個字段。
然后,這使我檢查了如何將數據映射到模型。
然后,我逐步完成了從服務器查詢返回的Observable集合的內容。
這表明已返回所有數據,但所有模型字段均為空。 而是創建了一個客戶數組,並在單獨的客戶對象中填充了字段。
有人知道我該如何進一步調試嗎?
首先,我檢查了從查詢返回的集合的內容。 其中顯示了空的Model字段和客戶數組:
然后,我檢查了的內容, customers
的客戶數組(被填充):
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:
我不會直接在MongoDB中存儲ObservableCollection<T>
。
相反,我會將List<T>
存儲在MongoDB中。
為什么? ObservableCollection<T>
是WPF特定的數據結構,除非編寫自定義序列化程序,否則它可能不適用於MongoDB。
如果您使用的是MVVM,則需要將存儲在MongoDB中的數據與ViewModel分開。 我建議從MongoDB中檢索數據,然后使用諸如AutoMapper
或ExpressMapper
的映射器將其映射到ViewModel中。
看到另一個遇到相同問題的人 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.