Me gusta mucho Caliburn y el enlace de la convención de nomenclatura y me sorprendió que Visibilidad no esté vinculado de la misma forma que se utiliza el Convenio "CanNAME" para proteger una Acción. Por lo que sé, BooleanToVisibilityConverter solo se usa cuando Binding se usa explícitamente en Caliburn y no automáticamente como el método de guard. Así que estaba pensando en modificar la fuente para enlazar automáticamente a "bool? ControlNameIsVisible()" (null es igual a colapsar) o similar. Me preguntaba si ese es el enfoque correcto y, de ser así, si alguien ya ha hecho la implementación y podría compartirla aquí.Visibilidad Autobinding con la convención de nomenclatura
Respuesta
Se podría utilizar este método si quería, que es perfectamente razonable. Otro enfoque es usar un borde con el mismo nombre que una propiedad booleana en su modelo de vista. Caliburn.Micro configurará la visibilidad del borde en función del valor de la propiedad booleana.
<Border x:Name="ControlIsVisible">
<TextBox x:Name="MyControl" ... />
</Border>
Si desea una solución general, esto es lo que terminó con base en: Adding a convention for IsEnabled to Caliburn.Micro
Nota del primordial de BindActions, así como BindProperties para que pueda comprobar la visibilidad de las cosas que tienen acciones vinculadas a ellos.
protected override void Configure()
{
base.Configure();
ConventionManager.AddElementConvention<UIElement>(UIElement.VisibilityProperty, "Visibility", "VisibilityChanged");
var baseBindProperties = ViewModelBinder.BindProperties;
ViewModelBinder.BindProperties =
(frameWorkElements, viewModel) =>
{
BindVisiblityProperties(frameWorkElements, viewModel);
return baseBindProperties(frameWorkElements, viewModel);
};
// Need to override BindActions as well, as it's called first and filters out anything it binds to before
// BindProperties is called.
var baseBindActions = ViewModelBinder.BindActions;
ViewModelBinder.BindActions =
(frameWorkElements, viewModel) =>
{
BindVisiblityProperties(frameWorkElements, viewModel);
return baseBindActions(frameWorkElements, viewModel);
};
}
void BindVisiblityProperties(IEnumerable<FrameworkElement> frameWorkElements, Type viewModel)
{
foreach (var frameworkElement in frameWorkElements)
{
var propertyName = frameworkElement.Name + "IsVisible";
var property = viewModel.GetPropertyCaseInsensitive(propertyName);
if (property != null)
{
var convention = ConventionManager
.GetElementConvention(typeof(FrameworkElement));
ConventionManager.SetBindingWithoutBindingOverwrite(
viewModel,
propertyName,
property,
frameworkElement,
convention,
convention.GetBindableProperty(frameworkElement));
}
}
}
Tenga en cuenta que esto no funciona para el enlace de propiedad profundo de Caliburn.Micro (por ejemplo, Person_ControlName). – Govert
Esto funciona maravillosamente con ToolBars. Puedo mostrar/ocultar barras de herramientas completas en una ToolBarTray de la misma manera que puedo activar/desactivar elementos individuales en una barra de herramientas. ¡Muy agradable! Hasta ahora, no hay problemas. Cuanto más uso Caliburn.Micro, menos Visual Studio parece mágico. – metaomniliquant
- 1. serialVersionUID convención de nomenclatura
- 2. F # convención de nomenclatura
- 3. Enum convención de nomenclatura - Plural
- 4. ¿Cómo funciona la convención de nomenclatura cakePHP?
- 5. identidad SqlServer convención de nomenclatura
- 6. Variable de nomenclatura, mejor convención
- 7. variable constante de Java, convención de nomenclatura
- 8. Convención de nomenclatura para vistas de Django?
- 9. Convención de nomenclatura para widgets de Qt
- 10. Java: convención de nomenclatura para accesors
- 11. convención de nomenclatura DAO de Spring-Hibernate?
- 12. convención de nomenclatura de clase extendida óptima?
- 13. Convención de nomenclatura para campos privados
- 14. Convención de nomenclatura para restricción única
- 15. Proyectos/Convención de nomenclatura de paquetes?
- 16. paquete de pruebas unitarias convención de nomenclatura
- 17. ¿Convención de nomenclatura de ID en ASP.NET?
- 18. Convención de nomenclatura de tablas con Doctrine ORM
- 19. Convención de nomenclatura de Microsoft VB.NET
- 20. convención de nomenclatura de clase abstracta
- 21. convención de nomenclatura de recursos XAML
- 22. convención de nomenclatura para mayúsculas abreviaturas
- 23. Eventos: convención y estilo de nomenclatura
- 24. Convención de nomenclatura para objetos en java
- 25. Convención de nomenclatura en el objetivo C/C, comience con "_"?
- 26. convención de nomenclatura para patrones comunes?
- 27. método Objective C convención de nomenclatura
- 28. ¿Dónde se define la convención de nomenclatura de propiedades JavaBean?
- 29. ¿Cuál es la mejor convención de nomenclatura de ViewModel?
- 30. ¿Alguien puede explicar la convención de nomenclatura cruzada de gcc?
Nicely done. Puede que no sea la solución "correcta" para todas las instancias, pero este es un gran consejo. – IAmTimCorey
Para aquellos que no desean agregar control adicional en la interfaz de usuario, puede vincular la visibilidad directamente a la propiedad. Esto no se enlaza por convención, pero el código que toma es aproximadamente el mismo que el anterior, y sin control adicional para envolver. – liang
¿Tiene algún ejemplo? –