Загрузка контрольных данных извне - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть элементы управления, которые загружают данные из внешнего сервиса. Это работает нормально, но элемент управления либо лишен каких-либо данных, либо заполнен данными.

Как бы я реализовал добавление дополнительных режимов к этим элементам управления для "загрузки" и "загрузки ошибок" (или чего-то в этом роде)

Я знаю, что, вероятно, могу использовать 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 голосов
/ 21 ноября 2011

Есть много способов добиться того, о чем вы просите.

  1. Простым решением было бы просто иметь несколько слоев в элементе Grid и переключать их видимость в зависимости от логическогосостояние вашего элемента управления.

  2. Другим способом было бы иметь ViewModel со свойством состояния и набор свойств типа Visibility, которые привязаны к различным слоям и обновляются каждый раз.изменения вашего логического состояния или

  3. привязывают свойство состояния непосредственно к видимости этих слоев и имеют преобразователь, который возвращает правильную видимость слоя, соответствующую состоянию элемента управления.

  4. Наконец, вы можете использовать VisualStateManager для управления состоянием элемента управления.

  5. Дополнительно - вы можете использовать DataTemplates или напрямую создавать и обновлять содержимоевашего пользовательского интерфейса в коде позади.

Все зависит от того, что вы знаете, что вы предварительноFer и где вы хотите пойти с вашим кодом.Если это одноразовое решение для вашего приложения - я бы использовал ViewModel с некоторыми свойствами Visibility, поскольку лично я предпочитаю делать что-то с использованием шаблона MVVM.Если вам нужен элемент управления многократного использования, то вы можете установить видимость в коде как простейшее решение или использовать VisualStateManager в качестве наиболее причудливого.

Еще одна вещь, которая приходит на ум сейчас, - этоу вас есть свойство зависимостей или поведение, которое вы привязываете к состоянию вашего элемента управления, и оно автоматически накладывает на ваш элемент управления какой-то индикатор прогресса, так что вы можете повторно использовать этот adp / поведение для различных элементов управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...