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,因此只有最後一次調用被執行。
我希望得到這段代碼的幫助,或者參考一些可以幫助我的優秀文檔。
問候
也發生在我身上:想要不透明,啓用等綁定在一個網格上。在調試convention.GetBindableProperty(frameworkElement)時,只顯示了一個屬性「Visibility」。 – 2014-10-28 09:52:29