Caliburn.Micro ha cocido en las convenciones de apoyo ItemsControl
(por ejemplo, ComboBox o ListBox) controles basados que hacen que el requerido en xaml you Ver mínima.
Primero tiene la convención estándar donde un contenido de controles se vinculará a una propiedad de 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á enlazar ItemsControl.SelectedItem
a una propiedad de ViewModel que tiene el nombre singularizado del control, con "Activo", "Seleccionado" o "Actual" antepuesto (vea ConventionManager
en la fuente de Caliburn.Micro).
esto en mente usted puede lograr lo que quiera con lo siguiente en su Vista:
<ComboBox x:Name="Strings"></ComboBox>
y en su modelo de vista:
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 recoge el nombre de control ("Cuerdas ") y enlaza ComboBox.ItemsSource
a la propiedad ViewModel Strings
. La segunda convención primero singulariza "Cadenas" a "Cadena" y antepone "Seleccionado" para obtener la propiedad "Cadena Seleccionada" para vincular ComboBox.SelectedItem
a. Se propone
Otra solución bastante elegante aquí: http://stackoverflow.com/questions/4041233/binding-selectionchanged-to-viewmodel-using-caliburn-micro – buckley