[VS] Titulos de Menu en Mayusculas y Minusculas

Este post es muy simple, son solo los pasos para alternar entre mayusculas y minusculas los títulos en el Visual Studio, entendiendo que por defecto el VS se muestra así:

Lo primero que hacemos es entrar a Extensions and Updates:
Instalamos “All Caps Menu Option” y reiniciamos el VS:
Finalmente entramos a Tools -> Options -> Menu Title Casing:

Y listo, el menu aparecera tal como queramos:

[.NET] Entity Framework 5 & .NET

Para empezar, recordemos que EF es una ORM (Object Relational Mapping), que en palabras simples es una herramienta de Microsoft .NET que nos permite trabajar con nuestra data en base a un modelo conceptual en vez de tener que interactuar con la data directamente, se basa en el Dominio y no en  la Base de Datos, Conexiones o Procedimientos.

Entity Framework 

Entity Framework permite a los desarrolladores despreocuparse por el mantenimiento y la codificación necesaria para poder interactuar con cualquier base de datos relacional (Oracle, SQL, MySQL, etc) con un proveedor de datos EF válido.

Inicialmente Entity Framework dependía estrictamente de .NET, pero es a partir de Entity Framework 4.1 en que se separo relativamente, esto quiere decir que aunque todavía se construye sobre .NET, el ciclo de evolución de Entity Framework es independiente al de .NET.

Entity Framework se puede implementar en 3 formas distintas y haciendo simples descripciones: Code First (Si existen clases y no prefieres el diseñador visual), Model First (Si no existe la base de datos y prefieres el diseñador visual) y Database First (Si existe la base de datos y prefieres el diseñador visual). Ahora solo falta decir que en la implementación de Code First, EF5- no soporta la definición de Store Procedures propios para la persistencia de nuestra data con los métodos Insert, Update y Delete.

Rendimiento en Entity Framework 5

Desde la primera versión de Entity Framework, la clase CompiledQuery permitía a los desarrolladores pre-compilar las sentencias Linq para poder mejorar el rendimiento, ya que sin esto cada vez que se ejecutaba Linq, Entity Framework tenia que convertirlo a T-SQL.

Mas usar CompiledQuery tenia 2 grandes inconvenientes, el primero es que se tenia que definir explícitamente qué sentencias se iban a pre-compilar y la segunda era de que no había manera de usar CompiledQuery en DbContext. A esto se suma que si tu estas usando el modelo Code First, lo más probable es que estés usando DbContext y también que Microsoft recomienda que se deberia usar DbContext en nuevos proyectos incluso si estas trabajando con Database First o Model First. En otras palabras, usar CompiledQuery se volvía algo inusual y desconocido.

Entity Framework 5 nos trae auto-compiled queries o auto-cached queries (entiendase lo mismo) lo cual hace que nuestro código Linq se resuelva muy diferente ya que Entity Framework guarda implícitamente en cache el T-SQL generado. Entonces cada vez que se va a ejecuta Linq lo que se hace antes de generar el T-SQL es buscar si existe en cache el T-SQL correspondiente y se utiliza.

Actualizando a Entity Framework 5 & .NET 4.5

Si por algún motivo se empezó a usar EF4 ó EF5 con .NET 4 y se desea hacer un upgrade a EF5 con .NET 4.5 hay que tomar muy en cuenta que las versiones de las .dll referenciadas son diferentes. Entonces cambiar el Target framework del proyecto a .NET 4.5 no es suficiente, ya que la .dll del EntityFramework no se actualiza y hay que hacerlo manualmente.


Entity Framework 5 con .NET 4

Entity Framework 5 con .NET 4.5

Asi que simplemente hay que actualizar la referencia y hacer que apunte hacia la .dll que se encuentra en PackagesEntityFramework.5.0.0libnet45 o donde lo tengan:

Otros enlaces:

[WPF & SL] Behavior

Aveces los comportamientos básicos de los controles no siempre satisfacen todos nuestros requerimientos. Digamos por ejemplo que en nuestra aplicación WPF queremos que nuestros TextBox solo acepten números, lo peor que podríamos hacer en este tipo de casos es manejar el evento PreviewTextInput en el codebehind de cada vista de nuestra aplicación porque simplemente resultaría poco casi nada mantenible.

Entonces en esta ocasión vamos a solucionar este tema usando Behavior, que simplemente es la clase base que nos permitirá adjuntar comportamientos. Para empezar lo primero que debemos hacer es agregar una referencia a System.Windows.Interactivity y luego crear nuestra clase que extenderá Behavior<T>.

Como podemos apreciar en la presente imagen, la clase abstracta Behavior tiene la propiedad AssociatedObject, la cual es la que tendrá la referencia al control adjunto y dos métodos virtual, los cuales tenemos que sobrescribir para implementar correctamente Behavior. Si quieres más detalle sobre Behavior, aquí.

Ahora luego de construir nuestra clase de ejemplo ValueTypeBehavior tenemos algo como esto:

namespace WPF.SimpleBehavior.Behaviors
{
public class ValueTypeBehavior : Behavior<UIElement>
{
protected override void OnAttached()
{
this.AssociatedObject.PreviewTextInput += AssociatedObject_PreviewTextInput;
base.OnAttached();
}

protected override void OnDetaching()
{
this.AssociatedObject.PreviewTextInput -= AssociatedObject_PreviewTextInput;
base.OnDetaching();
}

private void AssociatedObject_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
int integer;
 e.Handled = !int.TryParse(e.Text, out integer);
        }
}
}
Como se puede ver la implementación es muy sencilla, en este caso estamos manejando un evento pero puede ser cualquier otra cosa, se puede enviar información a través de un servicio, escribir en un log, etc. Para darle un poco más de funcionalidad le vamos a agregar un Dependency Property y ahora quedaria así:

namespace WPF.SimpleBehavior.Behaviors
{
public class ValueTypeBehavior : Behavior<UIElement>
{
public ValueType ValueType
{
get { return (ValueType)GetValue(ValueTypeProperty); }
set { SetValue(ValueTypeProperty, value); }
}

public static readonly DependencyProperty ValueTypeProperty =
DependencyProperty.Register("ValueType", typeof(ValueType), typeof(ValueTypeBehavior), new PropertyMetadata(ValueType.String));

protected override void OnAttached()
{
this.AssociatedObject.PreviewTextInput += AssociatedObject_PreviewTextInput;
base.OnAttached();
}

protected override void OnDetaching()
{
this.AssociatedObject.PreviewTextInput -= AssociatedObject_PreviewTextInput;
base.OnDetaching();
}

private void AssociatedObject_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
switch (ValueType)
{
case ValueType.String:
break;
case ValueType.Int32:
int integer;
if (!int.TryParse(e.Text, out integer))
e.Handled = true;
break;
default:
break;
}
}
}

public enum ValueType
{
String = 0,
Int32 = 1
}
}
Ahora lo último que falta es modificar nuestro XAML para poder usarlo, lo único que tenemos que hacer es agregar una referencia a System.Windows.Interactivity y a nuestra clase que en este caso solo serían xmlns:i=”http://schemas.microsoft.com/expression/2010/interactivity” y xmlns:b=”clr-namespace:WPF.SimpleBehavior.Behaviors” respectivamente. Ahora quedaría algo así:

<Window x:Class="WPF.SimpleBehavior.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:b="clr-namespace:WPF.SimpleBehavior.Behaviors"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Title="WPF - SimpleBehavior" Height="350" Width="525">

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="My age is:" FontSize="72" Margin="9" FontFamily="Segoe UI Light" Foreground="Orange"/>
<TextBox FontSize="72" Margin="9" TextAlignment="Center">
<i:Interaction.Behaviors>
<b:ValueTypeBehavior ValueType="Int32" />
</i:Interaction.Behaviors>

</TextBox>
<TextBlock Text="xamldevelopment.blogspot.com" TextAlignment="Center" FontSize="21" Margin="9" FontFamily="Segoe UI Light" Foreground="Orange"/>
</StackPanel>
</Window>

Y listo!

Cabe indicar que se puede agregar más de un Behavior, solo se tendrían que ir colocando dentro de las etiquetas <i:Interaction.Behaviors> y </i:Interaction.Behaviors>.

El evento PreviewTextInput solo esta disponible para WPF, en Silverlight tendrías que usar KeyDown.

Actualmente la clase Behavior no existe naturalmente para WinRT.

XAML vs XML

Probablemente no sea el tema más buscado en Internet, pero considero que conocer estas diferencias o similitudes es un buen punto de partida para todo desarrollador o diseñador que presenta o no interes en XAML.

Para empezar, XAML fue desarrollado por Microsoft y se baso en el conocido metalenguaje XML. XAML tiene y extiende todas las virtudes del XML (estructura sólida y legible) y actualmente es empleado para la definición de las interfaces gráficas en Windows Presentation Foundation (WPF), Silverlight, Windows Phone y Windows 8.

Cuando hablamos de XAML podríamos decir que es XML, sin embargo no podemos decir lo contrario, esto es porque el XML nos sirve para expresar data en base a marcas bajo el paradigma de Jerarquía, Elementos y Atributos. Cuando se trabaja con XAML las palabras clave son Inicialización y Serialización ya que XAML no define simplemente data, en el XAML cada elemento se convierte en la instancia de una clase determinada (inicializando objetos gráficos y no gráficos) y cada atributo permite definir el valor de una propiedad (el estado de un objeto) o especificar el manejador de un evento.

Me atrevo a decir que si haz trabajado con XML para transportar o persistir información aprenderás XAML más rápido de lo que crees y se te abrirán muchísimas puertas. XAML no solo nos permite definir controles de usuario, animaciones, estilos, recursos, brindar una experiencia de usuario sorprendente (2D o 3D), sino también es indiferente a la complejidad del sistema. Conocer XAML nos permitirá desarrollar aplicaciones Desktop, Web y Mobiles.

Los invito a continuar en el Blog ya que poco a poco se ira hablando sobre todas las tecnologías, además de intentar brindar conocimiento y material tan útil como para rendir un examen de certificación.

XAML Development

Bienvenidos!

Y es precisamente hoy 12 de Agosto del 2013 el día en que empieza el desarrollo de la pagina oficial de XAML Development.

¿Qué es XAML Development?

Es el nombre de un proyecto en el que se busca compartir información sobre el Desarrollo Software en WPF, Silverlight, Windows Phone 7 y Windows 8. A lo largo del tiempo y cuando se de el tiempo se irán subiendo posts con tips, enlaces o cursos acerca de estas tecnologías y el Desarrollo Software en general.

¿Cual es el alcance del sitio?

La plataforma de desarrollo sera .NET y las tecnologías serán WPF, Silverlight, WP7 y Windows 8,  sin embargo esto no niega que también se cubrirá el modelado y la persistencia de la información con SQL Server 2008/2012 o una implementación SOA con WCF ya sea con SOAP o REST.

También se compartirán tips sobre eficiencia en código (C#) o procedimientos (SQL). La arquitectura con la cual se trabajará es N-Capas y dependiendo al nivel del tema se implementara las técnicas, herrramientas o patrones necesarios para el desarrollo de la misma. MVVM, Repository Pattern, Composition Patter, Dependency Injection & IOC, Class Abstraction, Expression Design, Entity Framework 5, etc.