Posts Tagged ‘XAML’

Attached behavior no detecta ciertos eventos

21 mayo 2012

Problema: He creado un attached behavior, y al usarlo para que maneje algunos eventos, como por ejemplo MouseDown, no parece que pase nada, el evento no parece ser detectado por el codigo del behavior

Solucion: Esto suele ser debido a que controles de usuario como MenuItem atrapan en evento y no dejan que se propage (handled = true). Para evitar esto podemos usar los eventos Preview-*, por ejemplo, en este caso hariamos que el behavior respondiera ante el evento PreviewMouseDown, en vez del evento MouseDown

Anuncios

Problemas con ObservableCollection y XAML

5 enero 2010

Problema: Cuando le hago un databinding declarativo (desde xaml)  de un control (p.ej. un gridview o un dropdownlist) a una propiedad  en código que contiene una ObservableCollection, no funciona o no funciona como me esperaba.

Solucion: Hay que revisar que la propiedad DataContext del control está correctamente asignada (o correctamente heredada) para que pueda encontrar la propiedad que contiene la ObservableCollection. Lo mismo para las propiedades path para que los valores que queremos se muestren correctamente.
Hay que tener en cuenta que el objeto ObservableCollection debe de estar disponible como una propiedad pública (get), y que las propiedades de los objetos que contiene la ObservableCollection y que queremos mostrar, también deben de estar disponibles a través de  una propiedad pública(get). 
Hay que tener en cuenta también que debemos haber asignado o creado el objecto ObservableCollection antes de que sea procesado el XAML (llamada a InitializeComponent()), de lo contrario el control que esté bindeado a la propiedad ObservableCollection no se enterará de los cambios en la colección hasta que no volvamos a asignarle en su propiedad correspondiente (p.ej. ItemsSource)  una nueva ObservableCollection sobre la que trabajar.
Por último, tener en cuenta que los cambios solo se verán reflejados automáticamente en WPF si trabajamos con la ObservableCollection original, si asignamos una nueva ObservableCollection a la propiedad que se referencia desde XAML, desde WPF no se apreciarán cambios (ya que en realidad estaríamos modificando otra ObservableCollection diferente, la lista referenciada desde el control no habría cambiado)

WPF, binding a propiedades locales desde XAML

5 enero 2010

Problema: ¿Cómo se puede acceder a las propiedades locales (las del codebehind, vamos) de una ventana o user control WPF desde el XAML?

Solución: La forma más sencilla es asignar al datacontext de la ventana o control la propia ventana o control, con la siguiente declaración:

DataContext="{Binding RelativeSource={RelativeSource self}}"

Esto dentro de la etiqueta <Window> o <UserControl>, dependiendo de lo que se trate.
Así el DataContext de la ventana quedaría fijado a ella misma, y las propiedades públicas serían accesibles escribiendo el nombre de estas.