Пользовательские соглашения Caliburn.Micro с несколькими элементами (NumericUpDown.Value, NumericUpDown.Maximum)

Я возился с соглашениями 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, поэтому выполняется только последний вызов.

Я был бы признателен либо за помощь с этим фрагментом кода, либо за ссылку на какую-нибудь хорошую документацию, которая могла бы мне помочь.

Наилучшие пожелания


person SchattenMann    schedule 10.09.2014    source источник
comment
Со мной тоже случилось: нужна непрозрачность, включена и т. д., привязанная к сетке. Во время отладки Convention.GetBindableProperty(frameworkElement) отображал только одно свойство Visibility.   -  person Zéiksz    schedule 28.10.2014


Ответы (1)


я где-то узнал, что CM допускает только одно соглашение для каждого элемента, поэтому причина такого поведения ...

Однако, поскольку такие элементы, как ComboBox, позволяют привязывать несколько свойств (SelectedItem, ItemSource и т. д.), я не полностью убежден...

person SchattenMann    schedule 03.11.2014