从外部加载控制数据

本文关键字:控制数据 加载 从外部 | 更新日期: 2023-09-27 18:15:21

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

我该如何为那些"加载"answers"错误加载"控件添加额外的模式(或类似的东西)

我知道我可以使用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个状态的usercontrol,我是否可以使用任何技术来显示一个加载/错误通知,而不是一个未填充的控件?是否有一种基于绑定控制状态的方法?

从外部加载控制数据

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

  1. 简单的解决方案是在网格元素中设置多个图层,并根据控件的逻辑状态切换它们的可见性。

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

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

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

  5. 另外,你可以使用datatemplate或者直接在后面的代码中构建和更新UI的内容。

这完全取决于你知道什么,你喜欢什么,以及你想把你的代码带到哪里。如果这是您的应用程序的一次性解决方案-我会使用具有一些可见性属性的ViewModel,因为我个人更喜欢使用MVVM模式做事。如果你想要的是一个可重用的控件,那么你可以在后面的代码中设置可见性,作为最简单的解决方案,或者使用VisualStateManager作为最花哨的解决方案。

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