2011-11-21 63 views
0

我有控制其中负载从外部服务数据。这工作正常,但控制要么没有任何数据或完整的数据。加载控制数据从外部

我将如何实现增加额外的模式为“加载”和“错误加载”(或大意的东西)

我知道我大概可以使用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个国家将工作。有没有办法根据绑定来控制状态?

回答

0

的方法有很多,你可以达到你所要求的东西。

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

  2. 另一种方法是将有具有状态属性和任一组被结合到不同的层,并每次您的逻辑状态的变化或

  3. 绑定的更新可见性类型属性的一个ViewModel直接映射到这些图层的可见性,并且具有一个转换器,该转换器将正确的可见性返回到与控件状态对应的图层。

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

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

这一切都取决于你知道什么,你更喜欢什么,以及你想要与你的代码去哪里。如果这是您的应用程序的一次性解决方案 - 我会使用具有某些Visibility属性的ViewModel,因为我个人更喜欢使用MVVM模式进行操作。如果你想拥有的是一个可重用的控制,那么你可以在后面的代码设置为能见度简单的解决方案,或使用VisualStateManager作为最看中的一个。

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

相关问题