如何构造一个用于ObservableCollection的类

时间:2015-08-18 02:35:07

标签: c# wpf collections

我正在尝试使用SharePoint列表中的数据填充WPF数据网格。

我使用以下内容检索列表信息:

private void buttonRefreshOrders_Click(object sender, RoutedEventArgs e)
{
    using (var ctx = new ClientContext("http://sharepoint"))
    {
        var list = ctx.Web.Lists.GetByTitle("Resource Orders");

        CamlQuery query = new CamlQuery
                                {
                                    ViewXml =
                                        @"<Where><Or><Eq><FieldRef Name=""Status""></FieldRef><Value Type=""Text"">Approved</Value></Eq><IsNotNull><FieldRef Name=""Status"" /></FieldRef></IsNotNull></Or></Where>"
                                };

        var collListItem = list.GetItems(query);

        ctx.Load(
            collListItem, 
            items => items.Include(
                item => item.Id, 
                item => item.DisplayName,      
                item => item.HasUniqueRoleAssignments,
                item => item["Persona"]));

        ctx.ExecuteQuery();

        if (collListItem.Count == 0)
        {
            MessageBox.Show(
                "No resource orders are currently within the queue.", 
                "Information Center", 
                MessageBoxButton.OK, 
                MessageBoxImage.Information);
        }
        else
        {
            MessageBox.Show("Success!");

            foreach (var item in collListItem)
            {
                CustomersCollection.Add(new Customers { Persona = item["Persona"].ToString() });
            }

            dataGridOutstandingOrders.ItemsSource = CustomersCollection;
        }
    }

}

我使用以下方法创建了一个可观察的集合:

public ObservableCollection<Customers> CustomersCollection { get; set; }

我的Customers类看起来像这样:

public class Customers
{
    /// <summary>
    /// Gets or sets the persona.
    /// </summary>
    public string Persona { get; set; }
}

我在以下一行收到System.NullReferenceException

CustomersCollection.Add(new Customers { Persona = item["Persona"].ToString() });

我预计的是我的客户课程没有正确初始化,但我不完全确定如何解决这个问题或研究什么。这里遗失的是什么?

1 个答案:

答案 0 :(得分:1)

这里最可能的问题是item [“Persona”]为空。

您的客户代码看起来很好。

编辑:Opps,你没有初始化你的收藏。因此,当您调用它时,您试图将客户置于空值。

您需要实例化ObservableCollection

的实例

所以你已经将它声明为let假设Class xyz的属性。因此,您需要在上面的代码中使用它,如下所示

xyz stuff = new xyz();
stuff.CustomersCollection = new ObservableCollection<Customers>();
stuff.CustomersCollection.add(new customer("blah"));

或者,在xyz的create方法中声明初始化,以便在对象创建时实现集合的新实例。