从外部加载控制数据
本文关键字:控制数据 加载 从外部 | 更新日期: 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,我是否可以使用任何技术来显示一个加载/错误通知,而不是一个未填充的控件?是否有一种基于绑定控制状态的方法?
有很多方法可以达到你的要求。
-
简单的解决方案是在网格元素中设置多个图层,并根据控件的逻辑状态切换它们的可见性。
-
另一种方法是有一个ViewModel,它有一个状态属性和一组可见性类型属性,这些属性绑定到不同的层,并在每次逻辑状态改变时更新,或者
-
将state属性直接绑定到这些层的可见性,并有一个转换器返回与控件状态对应的层的正确可见性。
-
最后,你可以使用VisualStateManager来控制控件的状态
-
另外,你可以使用datatemplate或者直接在后面的代码中构建和更新UI的内容。
这完全取决于你知道什么,你喜欢什么,以及你想把你的代码带到哪里。如果这是您的应用程序的一次性解决方案-我会使用具有一些可见性属性的ViewModel,因为我个人更喜欢使用MVVM模式做事。如果你想要的是一个可重用的控件,那么你可以在后面的代码中设置可见性,作为最简单的解决方案,或者使用VisualStateManager作为最花哨的解决方案。
现在想到的另一件事是有一个附加的依赖属性或行为,你绑定到你的控件的状态,它会自动覆盖你的控件与某种形式的进度指示器,所以你可以重用adp/行为不同的控件。