从外部加载控制数据

时间:2011-11-21 09:33:18

标签: c# silverlight windows-phone-7

我有从外部服务加载数据的控件。这样可以正常工作,但控制要么没有任何数据,要么没有数据。

我如何实现为这些控件添加额外的模式以“加载”和“错误加载”(或者那种效果)

我知道我可以使用OnPropertyChange来判断数据是否已更改,如何确认下载失败。

目前我做的事情

wc.OpenReadCompleted += Feed;
wc.OpenReadAsync(new Uri(formattedFeedUrl));

...

private void Feed(object Sender, OpenReadCompletedEventArgs e)
{
    if (e.Error != null)
    {
        return; // here I want to notify that there's a download error somehow to the usercontrol
    }
    using (Stream s = e.Result)
    {
        // here I populate the ObservableCollection and notifychange

        // and somewhere here, if the xml does not generate any data i want to notify a control also.

是否有任何技术可用于显示加载/错误通知而不是未填充的控件,如果有ServiceControl而不是简单的用户控件有3个状态可以工作。有没有办法根据绑定来控制状态?

1 个答案:

答案 0 :(得分:0)

有很多方法可以达到你所要求的目标。

  1. 简单的解决方案是在Grid元素中只有多个图层,并根据控件的逻辑状态切换其可见性。

  2. 另一种方法是让ViewModel具有state属性和一组可见性类型属性,这些属性绑定到不同的层,并在每次逻辑状态更改时更新或

  3. 将state属性直接绑定到这些图层的可见性,并有一个转换器,它返回对应于控件状态的图层的正确可见性。

  4. 最后,您可以使用VisualStateManager来控制控件的状态。

  5. 此外 - 您可以使用DataTemplates或直接在后面的代码中构建和更新UI的内容。

  6. 这完全取决于您的知识,喜欢的内容以及您希望使用代码的位置。如果这是一个适用于您的应用程序的一次性解决方案 - 我将使用具有一些Visibility属性的ViewModel,因为我个人更喜欢使用MVVM模式。如果你想拥有的是一个可重用的控件,那么你可以将后面代码中的可见性设置为最简单的解决方案,或者使用VisualStateManager作为最奇特的解决方案。

    现在想到的另一件事是拥有一个附加的依赖项属性或绑定到控件状态的行为,它会使用某种进度指示器自动覆盖您的控件,因此您可以重用该adp /不同控制的行为。