Я возился с соглашениями CM, пытаясь понять, как они работают, но я не нашел где-нибудь приличной статьи, объясняющей шаг за шагом, как и почему.
Однако я нашел несколько фрагментов кода, с которыми я работал с некоторым успехом. Однако в данном случае я не понимаю, что происходит.
Я пытаюсь привязать значение и максимум 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, поэтому выполняется только последний вызов.
Я был бы признателен либо за помощь с этим фрагментом кода, либо за ссылку на какую-нибудь хорошую документацию, которая могла бы мне помочь.
Наилучшие пожелания