Я общался с соглашениями CM, пытаясь понять, как они работают, но я не нашел достойную статью, где-то объяснял шаг за шагом как и почему.Caliburn.Micro несколько пользовательских условных условных обозначений (NumericUpDown.Value, NumericUpDown.Maximum)
Однако я нашел несколько фрагментов кода, с которыми я работал с некоторым успехом. В этом случае, однако, я не понимаю, что происходит.
Я пытаюсь связать значение NumericUpDown и максимальное с соответствующим свойством ViewModel. Я был в состоянии сделать это с помощью следующего кода:
Значение
ConventionManager.AddElementConvention<NumericUpDown>(NumericUpDown.ValueProperty, "Value", "ValueChanged");
Максимальная
ConventionManager.AddElementConvention<NumericUpDown>(NumericUpDown.MaximumProperty, "Maximum", "MaximumChanged");
var baseBindProperties = ViewModelBinder.BindProperties;
ViewModelBinder.BindProperties =
(frameWorkElements, viewModels) =>
{
foreach (var frameworkElement in frameWorkElements)
{
var propertyName = frameworkElement.Name + "Max";
var property = viewModels.GetPropertyCaseInsensitive(propertyName);
if (property != null)
{
var convention = ConventionManager.GetElementConvention(typeof(NumericUpDown));
ConventionManager.SetBindingWithoutBindingOverwrite(
viewModels,
propertyName,
property,
frameworkElement,
convention,
convention.GetBindableProperty(frameworkElement));
}
}
return baseBindProperties(frameWorkElements, viewModels);
};
Однако здесь приходит странная часть, я могу только сделать один из них работать. Это заставляет меня поверить, что я где-то делаю ошибку. Кажется, я могу только назвать AddElementConvention, и поэтому выполняется только последний вызов.
Я был бы признателен за помощь в этом фрагменте кода или ссылку на хорошую документацию, которая могла бы помочь мне в этом.
С наилучшими пожеланиями
Случилось также: нужна прозрачность, включена и т. д., связанная с сеткой. Во время отладки соглашения .GetBindableProperty (frameworkElement) показывал только одно свойство «Видимость». –