Я полагаю, ваш пример кода является частью класса обслуживания: вы не можете получить доступ к атрибутам службы, таким как 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;
}
Мое решение для этого состоит в том, чтобы реализовать асинхронный слой между моими данными и 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.]
Следующие видео от mix08 и обходят Вас посредством выполнения точно, что Вы хотите.
(смотрите по очереди, если это возможно. это находится в Silverlight, но укажет на Вас в правильном направлении.)
Весело провести время.
Вы могли использовать IsAsynchronous
свойство XmlDataProvider
вместе с DataChanged
событие (я не попробовал): взгляните на документацию.;-)
Вы могли, мог создать spinny-loady-thingy и добавить его к AdornerLayer ListBox.