在代码中使用自己的usercontrol填充Wrappanel

时间:2011-12-03 16:29:18

标签: c# database silverlight user-controls

我正在尝试创建一个页面,您可以在其中概览项目的赞助商,使用以下服务从数据库中提取数据:

    [OperationContract]
    public IEnumerable<Sponsor> getSponsors()
    {
        var query = (from p in dc.Sponsors select p);

        IEnumerable<Sponsor> i = query;

        return i;
    }

当我把断点放在i上时,我可以看到数据正确存在。

在我的Sponsorspage中,我执行以下操作

public partial class Sponsorspage : UserControl
{
    IEnumerable<Sponsor> sponsors = null;


    public Sponsorspage()
    {
        SponsorsServiceClient client = new SponsorsServiceClient();
        client.getSponsorsCompleted +=new EventHandler<getSponsorsCompletedEventArgs>(client_getSponsorsCompleted);
        client.getSponsorsAsync();

        InitializeComponent();


    }

    void client_getSponsorsCompleted(object sender, getSponsorsCompletedEventArgs e)
    {
        if (e.Error != null)
            MessageBox.Show(e.Error.ToString());
        else
        {
            sponsors = e.Result;

            foreach (Sponsor s in sponsors)
            {
                SponsorView control = new SponsorView(s.tekst);
                SLWrapPanel.Children.Add(control);
            }
        }
    }

对于数据库中的每个赞助商,我创建了Sponsorview,我将其提供给源和文本。您可以在此处查看我的Sponsorview代码。

public partial class SponsorView : UserControl
{
    public SponsorView(string tekst)
    {
        txtSponsor.Text = tekst;

        //Uri uri = new Uri(imageSource, UriKind.Relative);
        //ImageSource imgSource = new BitmapImage(uri);
        //imgSponsor.Source = imgSource;

        InitializeComponent();
    }
}

但是当我运行页面时,我收到以下错误:

Object reference not set to an instance of an object.

   at OndernemersAward.Views.SponsorView..ctor(String tekst)
   at OndernemersAward.Views.Sponsorspage.client_getSponsorsCompleted(Object sender, getSponsorsCompletedEventArgs e)
   at OndernemersAward.SponsorsServiceReference.SponsorsServiceClient.OngetSponsorsCompleted(Object state)

我要做的是将string tekst中的信息(此处sponsor s)提供给我的用户控件,然后用它来填充文本块。我做错了吗?

谢谢! :)

1 个答案:

答案 0 :(得分:1)

好吧,你试图迭代你应该在sponsors变量中保存的结果。但请注意,您正在调用getSponsors方法的asynchronus版本(我记得Silverlight中唯一可用的版本)。这意味着,在调用service方法后你不会立即得到结果,而是需要等到调用完成执行的事件后才会被调用。

我不知道为什么这样的事情会给调试带来一些问题,但是代码中的错误肯定会导致显示页面出现问题。

Here是关于如何从服务中检索结果的非常简单的示例。希望这会帮助你注意你的方法中的错误。