2014-09-10 17 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); 
      }; 

但是,來這裏的怪異的一部分,我只能讓其中的一個工作。這讓我相信我在某個地方做了一些noob錯誤。我似乎只能調用AddElementConvention,因此只有最後一次調用被執行。

我希望得到這段代碼的幫助,或者參考一些可以幫助我的優秀文檔。

問候

+0

也發生在我身上:想要不透明,啓用等綁定在一個網格上。在調試convention.GetBindableProperty(frameworkElement)時,只顯示了一個屬性「Visibility」。 – 2014-10-28 09:52:29

回答

0

我發現的地方,CM只允許每個項目一個約定所以這是對這種行爲的原因...

但是因爲像組合框項目允許多個特性結合(的SelectedItem,的ItemSource等等...)我沒有完成說服......