Archive for the ‘c#’ Category

ObservableCollection y propiedades

26 marzo 2010

Problema: Tengo una ObservableCollection que contiene una coleccion de objetos que son de tipo de una clase creada por mi. Esta ObservableCollection esta bindeada a un elemento XAML. Cuando añado o quito elementos el elemento XAML se me actualiza, pero cuando modifico las propiedades de los elementos de la coleccion, el elemento XAML no se entera.

Solucion: Hacer que nuestra clase a la que pertenecen los objetos de la ObservableCollection implemente el interfaz INotifyPropertyChanged. Al implementar la interfaz necesitaremos añadir a nuestra clase un nuevo evento publico de tipo PropertyChangedEventHandler.

public event PropertyChangedEventHandler PropertyChanged;

Finalmente, para las propiedades que queramos que actualicen el elemento XAML tendremos que hacer que cuando cambien de valor (en el SET de la propiedad) lancen el evento antes comentado. Ejemplo con una propiedad llamada “miPropiedad”:

set
{
    _miPropiedad = value;
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs("MiPropiedad"));
    }
}

Terminar una aplicacion WPF

26 marzo 2010

 

Problema: Como termino una aplicacion WPF sin tener que recurrir al Window.close() de la ventana principal?

Solucion:

System.Windows.Application.Current.Shutdown();

Nota: Esto no termina la aplicacion inmediatamente. Si por ejemplo ejecutamos esto dentro de un bucle while, la aplicacion puede seguir corriendo indefinidamente si no se cumple la condicion de salida del bucle. Mas info aqui

Problemas con expresiones condicionales del tipo <condicion> ? expresion1 : expresion2

8 abril 2009

Problema: Tengo una expresión del tipo <condicion> ? expresion1 : expresion2 y al compilar me da el siguiente error: “Type of conditional expression cannot be determined because there is no implicit conversion between <tipo1> and <tipo2>

Solución: Este problema aparece porque las expresiones de este tipo solo pueden devolver un tipo, no dos. Al poner tipos diferentes como resultado de expresion1 y expresion2 el compilador nos daría ese error. Tenemos que decidir que tipo va a devolver la expresión y hacerle un casting a una de las dos expresiones. O si por un lado queremos devolver null y por otro un tipo primitivo (los cuales no pueden ser null) podemos usar los nullables. Ej:

string filtro;

(filtro.Equals(“todos”)) ? (bool?)null : false;