कैलिबर्न। माइक्रो अभी (1.3.1) वास्तव में आपके द्वारा वर्णित FrameworkElement
के लिए इस "एकाधिक" सम्मेलनों का समर्थन नहीं करता है।
संपादित:
हालांकि आप ViewModelBinder.BindProperties
विधि में हुक कर सकते हैं और वहाँ आप अपने खुद के अतिरिक्त convetion लागू कर सकते हैं।
मैं एक कदम आगे चला गया और एक प्रोटोटाइप जो काम करता है लागू किया, लेकिन यह मजबूत, और न ही सुंदर और शायद नहीं सही तरीका यह करने के लिए नहीं है।
static AppBootstrapper()
{
ConventionManager.AddElementConvention<FrameworkElement>(
UIElement.IsEnabledProperty,
"IsEnabled",
"IsEnabledChanged");
var baseBindProperties = ViewModelBinder.BindProperties;
ViewModelBinder.BindProperties =
(frameWorkElements, viewModels) =>
{
foreach (var frameworkElement in frameWorkElements)
{
var propertyName = frameworkElement.Name + "Enabled";
var property = viewModels
.GetPropertyCaseInsensitive(propertyName);
if (property != null)
{
var convention = ConventionManager
.GetElementConvention(typeof(FrameworkElement));
ConventionManager.SetBindingWithoutBindingOverwrite(
viewModels,
propertyName,
property,
frameworkElement,
convention,
convention.GetBindableProperty(frameworkElement));
}
}
return baseBindProperties(frameWorkElements, viewModels);
};
}
एक अपेक्षाकृत दर्दरहित की तरह लगता है लेकिन यह एक प्रारंभिक बिंदु हो सकता है अंतिम परिणाम प्राप्त करने का तरीका मैं चाहता हूं - हालांकि मुझे वास्तव में आश्चर्य हुआ है कि कैलिबर्न माइक्रो को इस तरह की चीज़ के लिए स्पष्ट समर्थन नहीं है, क्योंकि 'आईईएनएबल' और 'आईएसआरडऑनली' के लिए बाइंडिंग यूआई में काफी आम है। [मैंने माना कि मेरा GoogleFu गलती में था जब मुझे खुद को कोई जवाब नहीं मिला।] – Bevan
मैंने अपना समाधान अपडेट कर दिया है क्योंकि मूल व्यक्ति ने डिफ़ॉल्ट सम्मेलनों को मार दिया :) अब यह आपके नमूने के साथ भी काम करता है 'टेक्स्टबॉक्स नाम = "नाम "/>' बाइंडिंग्स: टेक्स्ट-> संपत्ति: 'नाम' और IsEnabled -> संपत्ति 'नाम सक्षम'। – nemesv
@ जुआनगुई अपडेट के लिए धन्यवाद। मुझे नहीं पता था कि एपीआई संस्करण 1.3.1 – nemesv