簡體   English   中英

如何將Observable Collection上的空數據解析為數據網格綁定?

[英]How to resolve null data on Observable Collection to data grid binding?

我已經在MongoLab上建立了一個數據庫,該數據庫被查詢並解析為Model。 該模型中的集合又綁定到數據網格。 但是,當我查詢數據庫時,網格上顯示的唯一數據是文檔的對象ID。

為了調試該問題,我使用每個字段的常量數據初始化了列表,並且綁定起作用,並填充了網格中的每個字段。

然后,這使我檢查了如何將數據映射到模型。

然后,我逐步完成了從服務器查詢返回的Observable集合的內容。

這表明已返回所有數據,但所有模型字段均為空。 而是創建了一個客戶數組,並在單獨的客戶對象中填充了字段。

有人知道我該如何進一步調試嗎?

首先,我檢查了從查詢返回的集合的內容。 其中顯示了空的Model字段和客戶數組:

第1步

然后,我檢查了的內容, customers的客戶數組(被填充):

第2步

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中檢索數據,然后使用諸如AutoMapperExpressMapper的映射器將其映射到ViewModel中。

看到另一個遇到相同問題的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM