Caliburn.Micro прямо сейчас ( 1.3.1 ) на самом деле не поддерживает эти "множественные" соглашения для того же FrameworkElement
, что вы описали.
РЕДАКТИРОВАТЬ :
Однако вы можете подключиться к методу ViewModelBinder.BindProperties
и там вы сможете реализовать свою собственную дополнительную конвекцию.
Я прошел один шагдалее и реализовал прототип, который работает, но это не надежный , не элегантный и, вероятно, не правильный способ сделать это.Но это может быть отправной точкой:
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);
};
}