отображать данные списка в текстовом блоке - PullRequest
1 голос
/ 04 марта 2011

Я создаю веб-часть Silverlight. я просто хочу отобразить данные списка sharepoint в текстовом блоке, а также таблицу данных, потому что я планирую вернуть только один элемент из списка. Мне удалось получить желаемый результат в таблице данных, но я не уверен, как изменить свой код, чтобы я мог отображать свои данные в текстовом блоке.

я думал, что смогу просто написать

texblock1.text = projects;

но выдает ошибку.

вот код на моей главной странице xaml -------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.SharePoint.Client;

namespace something{         

    public class Project{        
        public string Title {get; set;}        
    }     

    public partial class MainPage : UserControl    
    {        
        public string SiteUrl { get; set; }        

        private ListItemCollection _projects;        

        //private Web _web = null;        
        //private string _lastErrorMessage = null;        

        public MainPage()        
        {            

            InitializeComponent();
            ClientContext context = new ClientContext(ApplicationContext.Current.Url);
            context.Load(context.Web);
            List Projects = context.Web.Lists.GetByTitle("projects");
            context.Load(Projects);
            CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery();

            string camlQueryXml = "<View><Query><Where><Eq><FieldRef Name=\"NameLast\" /><Value Type=\"Boolean\">1</Value></Eq></Where></Query></View>"; 

            query.ViewXml = camlQueryXml;
            _projects = Projects.GetItems(query);
            context.Load(_projects);context.ExecuteQueryAsync(new ClientRequestSucceededEventHandler(OnRequestSucceeded), null);         

        }        

        private void OnRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args)        
        {            

            // This is not called on the UI thread.            
            Dispatcher.BeginInvoke(BindData);        
        }        

        private void BindData()        
        {            

            List<Project> projects = new List<Project>();            

            foreach (ListItem li in _projects)            

            {                

                projects.Add(new Project()                

                {                    
                    Title = li["Title"].ToString(),  
                });            

            }            

            dataGrid1.ItemsSource = projects; // must be on UI thread        
        }    
    }
}

1 Ответ

1 голос
/ 06 марта 2011

Для запуска кода в потоке пользовательского интерфейса используйте код следующим образом:

Dispatcher.BeginInvoke(() => {
    //add code here to which are to be executed on the UI thread
});
...