- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
Device.StartTimer(TimeSpan.FromSeconds(1),
() =>
{
foreach (var detail in Customer.Details.Where(p => new string[] { "Queue", "Wating"}.Contains(p.Status)))
{
detail.HasTimer = true;
detail.Time = detail.Time.Add(TimeSpan.FromSeconds(1));
}
return true;
});
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Bulingo.CCC.Mobile.Views.TicketDigital">
<ContentView.Content>
<StackLayout >
<StackLayout.VerticalOptions>
<LayoutOptions Alignment="Center">
</LayoutOptions>
</StackLayout.VerticalOptions>
<Button IsVisible="{Binding MostrarBoton}"
Text="Leer Código"
VerticalOptions="Center"
HorizontalOptions="Center"
TextColor="White"
BackgroundColor="#77D065"
Command="{Binding ReadQRCodeCommand}"/>
<Label FontAttributes="Bold"
TextColor="Red"
Text="El Código QR leído no es válido."
IsVisible="{Binding MostrarErrorQrCode}"/>
<Label FontAttributes="Bold"
TextColor="Red"
Text="Por favor verifique su conexión de red."
IsVisible ="{Binding MostrarErrorConexion}"
/>
<StackLayout VerticalOptions="FillAndExpand" IsVisible="{Binding MostrarServicios}">
<Image Aspect="Fill">
<Image.Source>
<UriImageSource Uri="{Binding LogoUrl}" />
</Image.Source>
</Image>
<StackLayout Orientation="Horizontal">
<Label FontSize="Large">Número</Label>
<Label Text="{Binding Cliente.Numero}" FontSize="Large"/>
</StackLayout>
<ListView ItemsSource="{Binding Cliente.Detalles}" SeparatorColor="Yellow" RowHeight="160">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell BindingContext="{Binding}" >
<Frame OutlineColor="Accent" >
<ContentView Padding="1" Margin="2" >
<StackLayout >
<Label Text="{Binding Servicio}" FontSize="Medium"/>
<StackLayout Orientation="Horizontal" >
<Label Text="Sala de Espera"/>
<Label Text="{Binding SalaEspera}" HorizontalOptions="End"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Tiempo Transcurrido"/>
<Label Text="{Binding TiempoTranscurridoText}" TextColor="{Binding TiempoTranscurridoColor}"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Personas delante"/>
<Label Text="{Binding TotalEnCola}"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Estado"/>
<Label Text="{Binding Estado}" FontAttributes="Bold"/>
</StackLayout>
</StackLayout>
</ContentView>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
<StackLayout VerticalOptions="FillAndExpand" IsVisible="{Binding MostrarFormularioEncuesta}">
<Button HorizontalOptions="End"
Command="{Binding CancelSurveyCommand}"
Text="No quiero llenar la encuesta..."/>
<Button Command="{Binding SaveSurveyCommand}" Text="Enviar"
TextColor="White"
BackgroundColor="#77D065"
HorizontalOptions="End"/>
<TableView Intent="Form">
<TableRoot Title="Llenar Encuesta" BindingContext="{Binding Encuesta}">
<TableSection Title="Método preferido">
<ViewCell>
<Picker SelectedIndex="{Binding BetterOrWorseInt}">
<Picker.Items>
<x:String>No estoy Seguro</x:String>
<x:String>Sin Sistema</x:String>
<x:String>Con Sistema</x:String>
</Picker.Items>
</Picker>
</ViewCell>
</TableSection>
<TableSection Title="Con el nuevo sistema, ¿la atención es más rápida o más lenta?">
<ViewCell>
<Picker SelectedIndex="{Binding SpeedInt}">
<Picker.Items>
<x:String>No estoy Seguro</x:String>
<x:String>Más lenta</x:String>
<x:String>Más rápida</x:String>
</Picker.Items>
</Picker>
</ViewCell>
</TableSection>
<TableSection Title="¿Desearía que instalemos el sistema en otras áreas o sucursales?">
<ViewCell>
<Picker SelectedIndex="{Binding ExpandInt}">
<Picker.Items>
<x:String>No estoy Seguro</x:String>
<x:String>No, no me gustaría</x:String>
<x:String>Sí, me gustaría</x:String>
</Picker.Items>
</Picker>
</ViewCell>
</TableSection>
<TableSection Title="¿Qué piensa de la calidad del nuevo sistema?">
<ViewCell>
<StackLayout HorizontalOptions="Fill">
<AbsoluteLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Slider Minimum="0" Maximum="5" WidthRequest="200" Value="{Binding QualityDouble}" Scale="1"
AbsoluteLayout.LayoutBounds="0, 0.5"
AbsoluteLayout.LayoutFlags="PositionProportional"
/>
<Label Text="{Binding QualityText}" HorizontalOptions="Center" HorizontalTextAlignment="Center"
AbsoluteLayout.LayoutBounds="0, 1"
AbsoluteLayout.LayoutFlags="PositionProportional"
/>
</AbsoluteLayout>
</StackLayout>
</ViewCell>
</TableSection>
<TableSection Title="¿Qué tan fácil es adaptarse al nuevo sistema?">
<ViewCell>
<StackLayout HorizontalOptions="Fill">
<AbsoluteLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Slider Minimum="0" Maximum="5" WidthRequest="200" Value="{Binding EasinessDouble}" Scale="1"
AbsoluteLayout.LayoutBounds="0, 0.5"
AbsoluteLayout.LayoutFlags="PositionProportional"
/>
<Label Text="{Binding EasinessText}" HorizontalOptions="Center" HorizontalTextAlignment="Center"
AbsoluteLayout.LayoutBounds="0, 1"
AbsoluteLayout.LayoutFlags="PositionProportional"
/>
</AbsoluteLayout>
</StackLayout>
</ViewCell>
</TableSection>
<TableSection Title="Sugerencias para el Sistema">
<ViewCell >
<Editor Text="{Binding NotesForBulingo}" HeightRequest="100" />
</ViewCell>
</TableSection>
<TableSection Title="Sugerencias general">
<ViewCell>
<Editor Text="{Binding NotesForClient}" HeightRequest="100"/>
</ViewCell>
</TableSection>
</TableRoot>
</TableView>
</StackLayout>
<StackLayout VerticalOptions="FillAndExpand" IsVisible="{Binding MostrarAgradecimiento}">
<Label FontSize="Large"
FontAttributes="Bold"
Text="¡Gracias por usar nuestros servicios y gracias por llenar nuestra encuesta!"></Label>
<Image Aspect="AspectFill">
<Image.Source>
<UriImageSource Uri="{Binding LogoUrl}" />
</Image.Source>
</Image>
<StackLayout Orientation="Horizontal">
<Label FontSize="Large">Número</Label>
<Label Text="{Binding Cliente.Numero}" FontSize="Large"/>
</StackLayout>
<ListView ItemsSource="{Binding Cliente.Detalles}" SeparatorColor="Yellow" RowHeight="160">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell BindingContext="{Binding}" >
<Frame OutlineColor="Accent" >
<ContentView Padding="1" Margin="2" >
<StackLayout >
<Label Text="{Binding Servicio}" FontSize="Medium"/>
<StackLayout Orientation="Horizontal" >
<Label Text="Sala de Espera"/>
<Label Text="{Binding SalaEspera}" HorizontalOptions="End"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Tiempo Transcurrido"/>
<Label Text="{Binding TiempoTranscurridoText}" TextColor="{Binding TiempoTranscurridoColor}"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Personas delante"/>
<Label Text="{Binding TotalEnCola}"/>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<Label Text="Estado"/>
<Label Text="{Binding EstadoAtencion}" FontAttributes="Bold"/>
</StackLayout>
</StackLayout>
</ContentView>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
<ActivityIndicator Color="Red" IsRunning="{Binding IsBusy}" />
</StackLayout>
</ContentView.Content>
</ContentView>
public class TicketDigitalViewModel : INotifyPropertyChanged
{
public static TimeSpan ServerClientTimeDifference { get; set; }
private bool mostrarErrorQrCode;
private static string surveyUri = "https://sdfghjklfghjkl.com/sadfkljsafdlkjroisdapi/api";
private ClienteViewModel cliente;
private bool isBusy;
private string barCodeResult;
private HubConnection connection;
private IHubProxy ticketHub;
private string connectionID;
private ScreenStatuses screenStatus;
private SampleViewModel encuesta;
private bool isEncuestado;
MobileBarcodeScanner scanner;
bool scannerInitialized = false;
private bool mostrarErrorConexion;
internal void Resume()
{
initConnection();
}
public TicketDigitalViewModel()
{
Encuesta = new SampleViewModel();
ReadQRCodeCommand = new Command(async () =>
await ReadQRCode(),
() => !IsBusy);
SaveSurveyCommand = new Command(async () =>
await SaveSurvey(Encuesta));
CancelSurveyCommand = new Command(async () =>
await CancelSurvey(),
() => !IsBusy);
}
public Command CancelSurveyCommand { get; }
public Command ReadQRCodeCommand { get; }
public Command SaveSurveyCommand { get; }
async Task<ZXing.Result> ReadQRCode()
{
if (!scannerInitialized)
{
scanner = new MobileBarcodeScanner();
scannerInitialized = true;
}
BarCodeResult = null;
var result = await scanner.Scan();
BarCodeResult = result.Text;
return result;
}
#region Data Properties.
public ClienteViewModel Cliente
{
get
{
return cliente;
}
set
{
SetProperty(ref cliente, value);
if (Cliente != null)
{
if (Device.RuntimePlatform == "Windows")
{
Device.StartTimer(TimeSpan.FromSeconds(1),
() =>
{
foreach (var detalle in Cliente.Detalles.Where(p => new string[] { "EnCola", "Atendiendo", "EsperaCliente" }.Contains(p.Estado)))
{
Device.BeginInvokeOnMainThread(() =>
{
detalle.HasTimer = true;
detalle.TiempoTranscurrido = detalle.TiempoTranscurrido.Add(TimeSpan.FromSeconds(1));
});
}
return true;
});
}
else
{
Device.StartTimer(TimeSpan.FromSeconds(1),
() =>
{
foreach (var detalle in Cliente.Detalles.Where(p => new string[] { "EnCola", "Atendiendo", "EsperaCliente" }.Contains(p.Estado)))
{
detalle.HasTimer = true;
detalle.TiempoTranscurrido = detalle.TiempoTranscurrido.Add(TimeSpan.FromSeconds(1));
}
return true;
});
Encuesta.Office = Cliente.PartnerOffice;
Encuesta.Customer = Cliente.Partner;
encuesta.QueueID = Cliente.IdTurno;
}
}
}
}
public SampleViewModel Encuesta
{
get
{
return encuesta;
}
set
{
if (SetProperty(ref encuesta, value))
{
encuesta = value;
OnPropertyChanged();
}
}
}
#endregion
#region Process Properties
internal ScreenStatuses ScreenStatus
{
get
{
return screenStatus;
}
set
{
screenStatus = value;
OnPropertyChanged();
}
}
public string ConnectionUrl
{
get
{
return BarCodeResult == null
? null
: BarCodeResult.Split(new string[] { "/Atencion/Cliente" }, StringSplitOptions.None)[0];
}
}
public string LogoUrl
{
get
{
return BarCodeResult == null
? null
: ConnectionUrl + "/Home/Thumbnail?ImagePath=Logo.png&width=396&height=222";
}
}
public string BarCodeResult
{
get
{
return barCodeResult;
}
set
{
try
{
IsBusy = true;
var theValue = value;
#if DEBUG
theValue = theValue?.Replace("https", "http");
#endif
var scanned = value != null && barCodeResult == null;
if (SetProperty(ref barCodeResult, theValue))
{
if (value == null)
{
Task.Factory.StartNew(() =>
{
UpdateStatus();
});
}
else if (!Uri.IsWellFormedUriString(value, UriKind.Absolute) || !value.Contains("Cliente/TicketDigital/"))
{
BarCodeResult = null;
MostrarErrorQrCode = true;
IsBusy = false;
}
else
{
UpdateStatus();
}
}
if (scanned) Resume();
}
catch (Exception ex)
{
throw;
}
}
}
public bool IsBusy
{
get
{
return isBusy;
}
set
{
if (SetProperty(ref isBusy, value))
{
ReadQRCodeCommand.ChangeCanExecute();
SaveSurveyCommand.ChangeCanExecute();
}
}
}
public string ConnectionID
{
get
{
return connectionID;
}
set
{
connectionID = value;
OnPropertyChanged();
}
}
public bool MostrarBoton
{
get
{
return ScreenStatus == ScreenStatuses.BarCodeScanner;
}
}
public bool MostrarFormularioEncuesta
{
get
{
return ScreenStatus == ScreenStatuses.Survey;
}
}
public bool MostrarAgradecimiento
{
get
{
return ScreenStatus == ScreenStatuses.Finished;
}
}
public bool MostrarServicios
{
get
{
return ScreenStatus == ScreenStatuses.TicketMonitoring;
}
}
public bool IsEncuestado
{
get
{
return isEncuestado;
}
set
{
if (SetProperty(ref isEncuestado, value))
{
}
}
}
public bool MostrarErrorQrCode
{
get
{
return mostrarErrorQrCode;
}
set
{
if (SetProperty(ref mostrarErrorQrCode, value))
{
}
}
}
public bool MostrarErrorConexion
{
get
{
return mostrarErrorConexion;
}
set
{
if (SetProperty(ref mostrarErrorConexion, value))
{
}
}
}
#endregion
#region Methods.
private void initConnection()
{
if (barCodeResult != null)
{
if (Device.RuntimePlatform == "Windows")
{
IsBusy = true;
connection = new HubConnection(ConnectionUrl + "/signalr/hubs");
AsyncHelpers.RunSync(MonitorTicket);
IsBusy = false;
}
else
{
IsBusy = true;
connection = new HubConnection(ConnectionUrl + "/signalr/hubs");
Task.Factory.StartNew(async () =>
{
await MonitorTicket();
IsBusy = false;
});
}
}
else
{
if (connection != null)
connection.Dispose();
}
}
async Task MonitorTicket()
{
Cliente = await this.HttpRequest<ClienteViewModel>(HttpMethod.Get,
"/TurnoDetalleApi/DatosTicketImpresion",
string.Format("id={0}",
BarCodeResult.Split(new string[] { "id=" },
StringSplitOptions.None)[1])
);
ticketHub = connection.CreateHubProxy("TicketHub");
ticketHub.On<bool>("isAlive", (alive) =>
{
});
ticketHub.On<ClienteDetalleViewModel>("update", async (detalle) =>
{
if (detalle.Servicio == null)
{
try
{
detalle.Servicio = await this.HttpRequest<string>(HttpMethod.Get, "/ServicioApi/GetNombreServicio", $"IdServicio={detalle.IdServicio}");
detalle.SalaEspera = await this.HttpRequest<string>(HttpMethod.Get, "/SalaEsperaApi/GetNombre/", $"id={detalle.IdSalaEspera}");
}
catch (WebException)
{
BarCodeResult = null;
MostrarErrorConexion = true;
}
}
if (Cliente.Detalles
.Where(p => p.IdServicio == detalle.IdServicio)
.Any())
{
var miDetalle = Cliente.Detalles.Last(p => p.IdServicio == detalle.IdServicio);
miDetalle.Servicio = detalle.Servicio;
miDetalle.SalaEspera = detalle.SalaEspera;
miDetalle.Estado = detalle.Estado;
miDetalle.TiempoAtencionPromedio = detalle.TiempoAtencionPromedio;
miDetalle.TiempoEsperaRestante = detalle.TiempoEsperaRestante;
miDetalle.TotalEnCola = detalle.TotalEnCola;
miDetalle.TiempoTranscurrido = detalle.TiempoTranscurrido;
}
else
{
Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
detalle.HasTimer = true;
detalle.TiempoTranscurrido = detalle.TiempoTranscurrido.Add(TimeSpan.FromSeconds(1));
return true;
});
Cliente.Detalles.Add(detalle);
}
UpdateStatus();
});
await connection.Start();
ConnectionID = connection.ConnectionId;
var sample = await NetworkHelper.HttpRequest<SampleViewModel>("https://sdfghjklfghjkl.com/sadfkljsafdlkjroisdapi/api", HttpMethod.Get, "/survey", $"QueueID={Cliente.IdTurno}&Customer={Cliente.Partner}");
IsEncuestado = sample != null;
await ticketHub.Invoke("SetTicket", Cliente.IdTurno);
await Task.Factory.StartNew(async () =>
{
do
{
await ticketHub.Invoke("KeepAlive");
await Task.Delay(1000 * 60);
} while (ScreenStatus == ScreenStatuses.TicketMonitoring);
});
IsBusy = false;
MostrarErrorConexion = false;
}
private void UpdateStatus()
{
if (BarCodeResult == null)
{
ScreenStatus = ScreenStatuses.BarCodeScanner;
}
else if (Cliente != null && Cliente.Detalles.Any(p => new string[] { "EnCola", "Atendiendo", "EsperaCliente" }.Contains(p.Estado)) && !IsEncuestado)
{
OnPropertyChanged(nameof(LogoUrl));
ScreenStatus = ScreenStatuses.TicketMonitoring;
}
else if (Cliente == null)
{
ScreenStatus = ScreenStatuses.TicketMonitoring;
}
else if (!IsEncuestado)
{
ScreenStatus = ScreenStatuses.Survey;
}
else
{
ScreenStatus = ScreenStatuses.Finished;
}
OnPropertyChanged(nameof(ScreenStatus));
OnPropertyChanged(nameof(MostrarAgradecimiento));
OnPropertyChanged(nameof(MostrarBoton));
OnPropertyChanged(nameof(MostrarFormularioEncuesta));
OnPropertyChanged(nameof(MostrarServicios));
IsBusy = false;
}
#endregion
#region Events
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(storage, value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
#endregion
}
最佳答案
最后,我可以使它工作。
问题在于通用Windows平台的xamarin表单的当前“稳定”版本(2.3.4.247)。
为了进行验证,我下载了当前的Xamarin.Forms的预发行版2.3.5.256-pre,现在我的应用程序正在运行。
我在Xamarin论坛上获得了提示... https://forums.xamarin.com/discussion/comment/284777
关于c# - Xamarin Forms MVVM更新不适用于UWP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44853710/
uwp 和非 uwp 应用程序之间是否可以进行通信。我的非uwp是一个提供服务的后台任务。我想在 uwp 应用程序中调用该非 uwp 服务。 如何调用电话? AppServiceConnection
我正在开发一个应用程序,该应用程序旨在在具有多个显示器(从 1 到 3必要)在每个监视器上,每个监视器都显示不同的 View 。 就我所见,UWP 并不自然适用于这种情况。我设法使用 CoreAppl
我正在尝试对UWP应用使用broadFileSystemAccess功能,但是package.appxmanifest的功能列表中未列出broadFileSystemAccess功能。 我的最低和最高
有时我有一个打开的流或一个事件的队列,必须在应用程序关闭时正确处理。在 WPF 应用程序中,我可以在应用程序上使用 Unloading 事件,但在 UWP 中我注意到这样的事件不存在。 我如何可靠地做
http://wikisend.com/download/880354/UWP_Server.zip 我已将代码上传至上述网址。 它是 UWP 中的客户端和服务器应用程序。这里客户端和服务器都在同一个
大家好 我知道这个问题(Chromium working on UWP)之前(2015/2016)有人问过,想看看有没有更新 我正在尝试在 UWP 应用程序中使用 CEF3 构建,但在运行该应用程序时
我目前正在构建一个应用程序,它可以使用 Windows 游戏 DVR 在某个时刻开始录制屏幕。该录音机在完成录音时将应用程序名称作为文件名。 我发现了如何使用 Applicationview.GetF
我已使用 Desktop App Converter 将我的 WPF 应用程序转换为 appx 包。我需要在资源管理器上下文菜单中有一个项目。 IE。用户右键单击文件并在主菜单中看到我的项目“对应用程
我想稍微修改一个 Button 控件(添加描述)。在哪里可以找到 UWP 控件的默认控件模板? 最佳答案 似乎可以在以下位置找到它们: C:\Program Files (x86)\Windows K
我想通过 UWP 应用访问 windows10 注册表项。 键为:\HKEY_LOCAL_MACHINE\SOFTWARE\MyCompanyName\MyName 我找不到任何函数调用来完成它。 请
我开发了一个 UWP appx,它可以安装在 cmd.exe 提示符中: C:\test>myapp.appx 但是在安装过程中会弹出一个 Windows GUI。 有没有什么方法 使用 Silent
在我的 UWP 应用程序中,如何通过 UpdateTask 中的代码进行调试? VS 2017 中的“生命周期事件”下拉菜单似乎没有提供触发此类后台任务的选项。有办法实现吗? 最佳答案 首先是关于 U
我尝试在 VS 2017 中创建一个 UWP 应用程序包。 创建时我收到一条神秘的错误消息:严重性代码描述项目文件行抑制状态错误 0xdef00532 - 资源“Files/Assets/Square
我有一个 TextBlock在我的应用程序中。我要办理pinch in & out在它上面调整字体的大小。当ManipulationDelta事件触发我检查Scale属性(property),但大多数
为什么默认选择的索引不起作用?它因平台异常而崩溃: RumTime 错误: Exception thrown at 0x00007FFDEF7F7788 (KernelBase.dll) in ab
有没有办法在同一个包中的 UWP 应用程序和桌面桥应用程序之间共享互斥锁?它们似乎有不同的命名空间;使用相同的名称不会在进程之间产生相同的对象。根据 WinObj,UWP 应用程序的对象是,存储在 A
有什么方法可以检测当前的 UWP 要退出 ? (由用户关闭或终止进程) 我想向服务器发送一些关于应用程序将断开连接的请求,还想在退出之前保存一些数据。 最佳答案 无法检测这种情况或阻止用户终止您的应用
我正在使用 XAML 和 C# 开发通用 Windows 平台应用程序。我想在 UWP 中更改焦点上 TextBox 的边框颜色。 在此先感谢您的帮助。 最佳答案 其实实现起来很简单,按照以下步骤即可
是否可以在 UWP 应用中更改甚至隐藏鼠标指针? 我唯一能找到的是: Windows.UI.Xaml.Window.Current.CoreWindow.PointerCursor = null; 但
我是一名优秀的程序员,十分优秀!