- ComboBox
- ItemsSource = puede ser un Binding a una clase.
- DisplayMemberPath="Description"
- SelectedValuePath="Code"
- SelectedValue = un Binding a una propiedad de la clase.
<dxe:ComboBoxEdit x:Name="checkedComboBox" ItemsSource="{Binding FiltersMV.Shifts}" ShowSizeGrip="False" IsTextEditable="False" ShowCustomItems="True" MinWidth="100">
<dxe:ComboBoxEdit.StyleSettings>
<dxe:CheckedComboBoxStyleSettings />
</dxe:ComboBoxEdit.StyleSettings>
</dxe:ComboBoxEdit>
- TimeSpan
//Fecha actual
DateTime currentDate = Servinte.Clinic.Core.Reads.ProxyHelper.CurrentDate();
////Horario actual
TimeSpan CurrentShift = new TimeSpan(currentDate.Hour, currentDate.Minute, currentDate.Second);
//Configuracion del turno de la Mañana
TimeSpan ShiftMornig = new TimeSpan(Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeMorning.Value.ConfigValue.Substring(0, 2)), Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeMorning.Value.ConfigValue.Substring(3, 2)), 0);
//Configuracion del turno de la tarde
TimeSpan ShiftAfternoon = new TimeSpan(Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeAfternoon.Value.ConfigValue.Substring(0, 2)), Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeMorning.Value.ConfigValue.Substring(3, 2)), 0);
//Configuracion del turno de la noche
TimeSpan ShiftNight = new TimeSpan(Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeNight.Value.ConfigValue.Substring(0, 2)), Convert.ToInt32(VariablesKardex.VariablesConfiguration.NursingShiftStartTimeMorning.Value.ConfigValue.Substring(3, 2)), 0);
//Turno que seleccionaremos por defecto
ShiftDefaul = TimeSpan.Compare(CurrentShift, ShiftMornig) >= 0 && TimeSpan.Compare(CurrentShift, ShiftAfternoon) < 0 ? ShiftDefaul = FiltersMV.Shifts.Where(w => w.Code.Equals("MA")).FirstOrDefault() :
TimeSpan.Compare(CurrentShift, ShiftAfternoon) >= 0 && TimeSpan.Compare(CurrentShift, ShiftNight) < 0 ? FiltersMV.Shifts.Where(w => w.Code.Equals("TA")).FirstOrDefault() :
ShiftDefaul = FiltersMV.Shifts.Where(w => w.Code.Equals("NO")).FirstOrDefault();
- Comando de MVVM para un evento
<ListBox Name="employeeListBox" ItemsSource="{Binding empList}" Grid.Row="0" SelectedItem="{Binding SelectedIndex}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=employeeListBox, Path=SelectedValue}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
- Binding de una propiedad MVVM a un DataTemplate
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, Path=DataContext.ErrorMessageDate }"/>
</DataTemplate>
- Realizar bloqueo en tabla
try
{
transaction = database.BeginTransaction();
if(!database.LockTable(transaction, "HHACTPRO", "ACTPROSUO", string.Format(" actprosuo = {0} and actprospo = {1}", param["1"], param["2"], param["3"]), true))
throw new ApplicationException("La reprogramación del registro esta siendo modificada por otro usuario. En el momento no se puede procesar esta acción");
int detailResult = database.ExecuteNonQuery(sql, transaction, parameters);
transaction.Commit();
}
catch(Exception ex)
{
transaction.Rollback();
throw;
}
- Obtener la secuencia de una tabla
//Consultamos la siguiente secuencia del registro que vamos a insertar, para eso utilizamos la funcion GetAutonumeric(). ESto solo para ORACLE
if (BaseRuntime.ProviderName.Equals("Oracle"))
{
sequence = db.GetAutonumeric("sq_hfrevord_sec", transaction);
param.Add(sequence, DbType.Int64);
}
//Consultamos la última secuencia del registro insertado en la tabla, para esto utilizamos la función. Esto para cualquier motor menos ORACLE
if (!BaseRuntime.ProviderName.Equals("Oracle"))
{
sequence = db.GetLastSerial("hfrevord", transaction);
param.Add(sequence, DbType.Int64);
}
- Generar un evento de doble clic en un control con MVVM
//Agregamos el namespace que necesitaremos en el trigger, y el DataContext es la VM
xmlns:spc="clr-namespace:Servinte.Presentation.Core;assembly=Servinte.Presentation.Core"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<Grid>
<i:Interaction.Triggers>
<spc:DoubleClickTrigger>
<i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl, Mode=FindAncestor}, Path=DataContext.ConsultOrderInformationCommand}" CommandParameter="{Binding OrderTreatment}"/>
</spc:DoubleClickTrigger>
</i:Interaction.Triggers>
</Grid>
- Mascara para un textedit devexpress
//Agregamos la mascara con #,###,### para indicar que máximo puede ingresar 7 enteros y .## dos decimales
<dxe:TextEdit Name="txtPrice" Text="{Binding AmountRegister}" MinHeight="30" MaskType="Numeric" MaskUseAsDisplayFormat="True" Mask="#,###,###.##" HorizontalContentAlignment="Right" />
- Validacion en un control devexpress
//Agregamos la propiedad Validate y el método que va a realizar la validación de los datos. Las otras propiedades de validación es para permitir dejar el control con el error y validar al momento de digitar los datos.
<dxe:TextEdit Name="txtAmountRegister" Text="{Binding AmountRegister}" Validate="txtAmountRegister_Validate" InvalidValueBehavior="AllowLeaveEditor" ValidateOnTextInput="False" IsEnabled="{Binding IsEnableRegister, Converter={StaticResource boolToVisibilityConverter},ConverterParameter=AmountRegister}" MinHeight="30" MaskType="Numeric" MaskUseAsDisplayFormat="True" Mask="###,###.0" HorizontalContentAlignment="Right" MaskAutoComplete="Optimistic">
- Line de separador
//Debemos asegurarnos que el namespace x, ya este invocado en el archivo con el siguiente código:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Luego agregamos la siguiente línea en el código XAML:
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
- Rotar texto en un control
<TabControl TabStripPlacement="Left">
<TabItem Header="Tab 1">
<TabItem.LayoutTransform>
<RotateTransform Angle="-90"></RotateTransform>
</TabItem.LayoutTransform>
<TextBlock> Some Text for tab 1</TextBlock>
</TabItem>
<TabItem Header="Tab 2">
<TabItem.LayoutTransform>
<RotateTransform Angle="-90"></RotateTransform>
</TabItem.LayoutTransform>
<TextBlock> Some Text for tab 2</TextBlock>
</TabItem>
</TabControl>
- Bindear el evento load de un control
//Debemos asegurarnos que el namespace x, ya este invocado en el archivo con el siguiente código:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Luego agregamos el código XAML en el control:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding MyICommandThatShouldHandleLoaded}" />
</i:EventTrigger>
</i:Interaction.Triggers>
//En la viewModel debemos crear un ICommand, para enlazarlo a este.
- Creación de tramas
//Primero debemos crear como recurso la trama de VisualBrush, para luego llamarla desde la propiedad del componente.
<VisualBrush x:Key="DiagonalLeftLines" TileMode="Tile" Viewport="0,0,20,1" ViewportUnits="Absolute" Viewbox="0,0,10,10" ViewboxUnits="Absolute">
<VisualBrush.RelativeTransform>
<RotateTransform Angle="-45" CenterY="0.5" CenterX="0.5"/>
</VisualBrush.RelativeTransform>
<VisualBrush.Visual>
<Canvas>
<Path Stroke="Red" Data="M 4 0 l 0 10" StrokeThickness="1" />
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
<VisualBrush x:Key="DiagonalRightLines" TileMode="Tile" Viewport="0,0,20,1" ViewportUnits="Absolute" Viewbox="0,0,10,10" ViewboxUnits="Absolute">
<VisualBrush.RelativeTransform>
<RotateTransform Angle="45" CenterY="0.5" CenterX="0.5"/>
</VisualBrush.RelativeTransform>
<VisualBrush.Visual>
<Canvas >
<Path Stroke="Red" Data="M 4 0 l 0 10" StrokeThickness="1" />
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
//En la interface gráfica, hacemos el enlace desde la propiedad al recurso de la trama:
<TextBlock Text="{Binding}" Background="{StaticResource DiagonalLeftLines}" TextTrimming="CharacterEllipsis" TextWrapping="Wrap"/>
No hay comentarios:
Publicar un comentario