Как сделать загрузку графической в WPF XAML?

Я полагаю, ваш пример кода является частью класса обслуживания: вы не можете получить доступ к атрибутам службы, таким как message или message2, из вашего HTML-шаблона. Вы должны вернуть HTTP, наблюдаемый контроллеру, и поместить логику подписки в свой контроллер.

Служба:

return this.http.post(`${this.uri}`, formData, httpOptions);

Контроллер:

сообщение: строка;

вход (имя пользователя, пароль): наблюдаемый {

this.cookieService.deleteAll();

this.ls.signIn(username, password).subscribe(res =>
  const self = this;
  xml2js.parseString(res, function (err, result) {
    const statusCode = ...
    console.log(statusCode); // it getting statusCode
    if (statusCode === '0') {
      self.message = 'test'; 
    } else {

    }
  }));
  return;

}

5
задан Edward Tanguay 23 January 2009 в 16:34
поделиться

4 ответа

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

Я создал это сверху архитектуры Модели Модели или Предъявителя Представления. Я записал сообщение в блоге об основах и более длинную часть о моем подходе к асинхронным Моделям Представления.

Вот XAML счетчика. В DataContext этому нужна Модель Представления, которая делает загрузку. В зависимости от State, LoadingIndicator сделает себя видимым и выйдет из строя снова.

<UserControl x:Class="App.WPF.CustomControls.LoadingIndicator"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Height="20"
             Width="20">
    <UserControl.Style>
        <Style TargetType="{x:Type UserControl}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding State}"
                             Value="Active">
                    <Setter Property="Visibility"
                            Value="Collapsed" />
                </DataTrigger>
                <DataTrigger Binding="{Binding State}"
                             Value="Loading">
                    <Setter Property="Visibility"
                            Value="Visible" />
                </DataTrigger>
                <DataTrigger Binding="{Binding State}"
                             Value="Invalid">
                    <Setter Property="Background"
                            Value="Red" />
                    <Setter Property="Visibility"
                            Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </UserControl.Style>
    <UserControl.Triggers>
        <EventTrigger RoutedEvent="UserControl.Loaded">
            <BeginStoryboard>
                <Storyboard TargetName="Rotator"
                            TargetProperty="Angle">
                    <DoubleAnimation By="360"
                                     Duration="0:0:2"
                                     RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </UserControl.Triggers>
    <Rectangle Stroke="Aqua"
               StrokeThickness="2"
               Width="10"
               Height="10">
        <Rectangle.RenderTransform>
            <RotateTransform x:Name="Rotator"
                             Angle="0"
                             CenterX="5"
                             CenterY="5" />
        </Rectangle.RenderTransform>
    </Rectangle>
</UserControl>

[Исходный Copyright © 2009 dasz.at OG; Эта работа лицензируется в соответствии с Лицензией MIT.]

6
ответ дан 14 December 2019 в 04:49
поделиться

Следующие видео от mix08 и обходят Вас посредством выполнения точно, что Вы хотите.

Часть 1

Часть 2

(смотрите по очереди, если это возможно. это находится в Silverlight, но укажет на Вас в правильном направлении.)

Весело провести время.

1
ответ дан 14 December 2019 в 04:49
поделиться

Вы могли использовать IsAsynchronous свойство XmlDataProvider вместе с DataChanged событие (я не попробовал): взгляните на документацию.;-)

0
ответ дан 14 December 2019 в 04:49
поделиться

Вы могли, мог создать spinny-loady-thingy и добавить его к AdornerLayer ListBox.

1
ответ дан 14 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: