Comment puis-je ajouter une convention personnalisée à Caliburn.Micro pour la propriété IsEnabled
des contrôles - quelque chose comme ayant NameEnabled
lié à IsEnabled
en parallèle Name
lié à Text
sur une zone de texte. En un sens, ce que je veux faire est similaire à la façon dont une propriété CanSave
peut être utilisée pour activer/désactiver un bouton lié à une méthode Save
, mais générique pour tous les contrôles.Ajout d'une convention pour IsEnabled à Caliburn.Micro
Répondre
Caliburn.Micro en ce moment (1.3.1) ne supporte pas vraiment ce "multiple" conventions pour le même FrameworkElement
, ce que vous avez décrit.
EDIT:
Cependant, vous pouvez brancher dans la méthode ViewModelBinder.BindProperties
et là, vous pouvez mettre en œuvre votre propre Convetion supplémentaire.
Je suis allé un peu plus loin et mis en œuvre un prototype qui fonctionne, mais ce n'est pas robuste, ni élégante et probablement pas la bonne façon de le faire. Mais il peut être un point de départ:
static AppBootstrapper()
{
ConventionManager.AddElementConvention<FrameworkElement>(
UIElement.IsEnabledProperty,
"IsEnabled",
"IsEnabledChanged");
var baseBindProperties = ViewModelBinder.BindProperties;
ViewModelBinder.BindProperties =
(frameWorkElements, viewModels) =>
{
foreach (var frameworkElement in frameWorkElements)
{
var propertyName = frameworkElement.Name + "Enabled";
var property = viewModels
.GetPropertyCaseInsensitive(propertyName);
if (property != null)
{
var convention = ConventionManager
.GetElementConvention(typeof(FrameworkElement));
ConventionManager.SetBindingWithoutBindingOverwrite(
viewModels,
propertyName,
property,
frameworkElement,
convention,
convention.GetBindableProperty(frameworkElement));
}
}
return baseBindProperties(frameWorkElements, viewModels);
};
}
Vous pouvez activer/désactiver un contrôle en définissant une propriété booléenne dans votre ViewModel et vous lier juste IsEnabled en XAML:
TextBox Name="SerialNumber" IsEnabled="{Binding IsReadOnly}"...
ViewModel:
private bool isReadOnly;
public bool IsReadOnly
{
get { return isReadOnly; }
set
{
this.isReadOnly = value;
NotifyOfPropertyChange(() => IsReadOnly);
}
}
Bien sûr, mais si je voulais mettre en place manuellement tous mes liant je ne serais pas en utilisant Caliburn.Micro en premier lieu. – Bevan
- 1. Caliburn.Micro.Telerik Convention RadTab pour IsEnabled
- 2. Convention dans Caliburn.Micro pour les boutons radio
- 3. caliburn.micro convention de liaison pour ListPicker sur WP7
- 4. Caliburn.Micro avec étiquette ne liant pas par convention
- 5. IsEnabled liaison à un booléen
- 6. TextBox, différent ControlTemplate + IsEnabled
- 7. Caliburn.Micro & Infragistics XamDockManager + TabGroupPane
- 8. Résolution du contrôle utilisateur externe x: Liaisons de convention de nom dans Caliburn.Micro
- 9. Comment puis-je implémenter un délai avec Caliburn.Micro actions en utilisant une convention
- 10. tête Bind textblock isEnabled au parent Zone de groupe isEnabled
- 11. isEnabled pour les séparateurs avec simpleCursorAdapter?
- 12. Comment appliquer un ValueConverter à une liaison Caliburn.Micro conventionnelle?
- 13. Caliburn.Micro question: XamlParseException "Impossible de définir un membre inconnu '{clr-namespace: Caliburn.Micro; assembly = Caliburn.Micro} View.Model'"
- 14. Essayer d'obtenir IsEnabled pour lier à la propriété de dépendance
- 15. Vue différente en fonction de ContentControl (Caliburn.Micro)
- 16. premier plan TextBlock se liant à IsEnabled
- 17. WPF Bind Textbox IsEnabled à ListBox SelectedItem
- 18. Caliburn.Micro et WebServiceResult
- 19. Caliburn.Micro 3.0 équivalent à Xamarin.Forms Navigation.PushModalAsync
- 20. dois-je passer d'Caliburn à caliburn.micro
- 21. caliburn.micro, Bootstrapper et CompositionRoot
- 22. Intégration CefSharp.WPF avec Caliburn.Micro
- 23. Combobox liaison à Deep Properties avec Caliburn.Micro
- 24. Sql à linq convention
- 25. Caliburn.Micro implémentant INotifyDataErrorInfo
- 26. Caliburn.Micro avec le contrôleur?
- 27. Caliburn.Micro DisplayRootViewFor jette NullReferenceException
- 28. RadMenu et RadMenuItem Caliburn.Micro
- 29. Caliburn.Micro et ORMs (NHibernate)
- 30. Liaison de données d'élément WPF pour IsEnabled (mais pour false)
On dirait une relativement indolore Je suis vraiment surpris que Caliburn Micro n'ait pas de support explicite pour ce genre de chose, car avoir des liaisons pour 'IsEnabled' et' IsReadOnly' est assez courant dans une interface utilisateur. [J'ai supposé que mon GoogleFu était en faute quand je ne pouvais pas trouver une réponse moi-même.] – Bevan
J'ai mis à jour ma solution parce que l'original a tué les conventions par défaut :) Maintenant cela fonctionne aussi avec votre exemple ' ' Bindings: Text-> Propriété: 'Name' et IsEnabled -> Propriété' NameEnabled'. –
nemesv
@juanagui merci pour la mise à jour. Je ne savais pas que l'API a changé avec la version 1.3.1 – nemesv