2014-09-10 4 views
0

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

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

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

+0

Случилось также: нужна прозрачность, включена и т. д., связанная с сеткой. Во время отладки соглашения .GetBindableProperty (frameworkElement) показывал только одно свойство «Видимость». –

ответ

0

я нашел где-то, что КМ позволяет только одно соглашение за единицу, так что причина такого поведения ...

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

Смежные вопросы