silverlight - Cómo capturar la selección de combobox en Caliburn Micro?
conventions caliburn.micro (2)
Estoy empezando con Caliburn Micro. Quiero tener un cuadro combinado con una lista de cadenas, y cuando el usuario selecciona un elemento, quiero que se me llame. Debería ser simple, ¿verdad? Estoy impaciente, y 5 minutos de Google no me lo han solucionado, ¡así que Apiladores al rescate!
Nota: Estoy a favor de una respuesta que me muestre cómo poner esto en el modelo de vista. Evitar complejos XAML es el objetivo de un marco MVVM, en mi humilde opinión.
Caliburn.Micro ha horneado en convenciones que ItemsControl
controles basados en ItemsControl
(por ejemplo, ComboBox o ListBox) que hacen que la xaml requerida en usted sea mínima.
Primero tiene la convención estándar donde un contenido de controles se vinculará a una propiedad ViewModel con el mismo nombre que el control. En el caso de ItemsControl
la propiedad de contenido de controles es ItemsControl.ItemsSource
. Y la segunda convención que obtienes de la caja con Caliburn.Micro es que se intentará unir ItemsControl.SelectedItem
a una propiedad ViewModel que tiene el nombre singularizado del control, con "Activo", "Seleccionado" o " Actual "antepuesto" (ver ConventionManager
en la fuente Caliburn.Micro).
Con esto en mente, puede lograr lo que quiera con lo siguiente en su Vista:
<ComboBox x:Name="Strings"></ComboBox>
y en su ViewModel:
public BindableCollection<string> Strings
{
get
{
// silly example of the collection to bind to
return new BindableCollection<string>(
new string[]{ "one", "two", "three"});
}
}
private string _selectedString;
public string SelectedString
{
get { return _selectedString; }
set
{
_selectedString= value;
NotifyOfPropertyChange(() => SelectedString);
// and do anything else required on selection changed
}
}
La primera convención toma el nombre de control ("Strings") y vincula ComboBox.ItemsSource
a las cadenas de la propiedad ViewModel. La segunda convención primero singulariza "Cadenas" a "Cadena" y antepone "Seleccionado" para obtener la propiedad "Cadena Seleccionada" para enlazar ComboBox.SelectedItem
a.
<ListBox x:Name="Items" ItemsSource="{Binding Path=Items}" cal:Message.Attach="[Event SelectionChanged]=[Action SelectedItemChanged($this.SelectedItem)]">