Я заметил, что можно вернуть строку типа "Visible", "Collapsed", "Images / xyz.png" или "# FFB3D1" из преобразователя значений, и магия привязок удастся выяснить это.Скрыть / показать элемент пользовательского интерфейса, найти изображение xyz.png или раскрасить что-нибудь розовым ...
Я уже давно воспринимал это как должное, теперь он не работает с моим последним кодом,Итак, мой вопрос, как я могу вручную вызвать эту функцию?
Объяснение:
Я увеличил масштаб, создав собственный MarkupExtension, который подключает MultiConverter, присоединяет его к MultiBinding и возвращает инициализированную привязку.Однако когда этот мультиконвертер возвращает такие строки, как "# FFB3D1" или "Red", кажется, ничего не происходит.
// PseudoCode from my MarkupExtension, setting up & returning the binding/multi-converter
public override object ProvideValue( IServiceProvider serviceProvider )
{
MultiBinding outputBinding = new MultiBinding();
foreach ( Binding b in bindings )
{
outputBinding.Bindings.Add( b );
}
outputBinding.Converter = converter;
return outputBinding.ProvideValue( serviceProvider );
}
Я предполагаю, что, поскольку я создаю в коде конвертер Multibinding +, он пропускает шаггде-то в Binding.Magic
пространстве имен.
Решение:
public override object ProvideValue( IServiceProvider serviceProvider )
{
// get targets
IProvideValueTarget serv = (IProvideValueTarget)serviceProvider.GetService( typeof( IProvideValueTarget ) );
// get Type Converter
object[] typeConverterAttributes = ( (DependencyProperty)serv.TargetProperty ).PropertyType.GetCustomAttributes( typeof( TypeConverterAttribute ), true );
TypeConverter typeConverter = null;
if ( typeConverterAttributes.Length > 0 )
{
TypeConverterAttribute attr = (TypeConverterAttribute)typeConverterAttributes[0];
typeConverter = (TypeConverter)Activator.CreateInstance( Type.GetType( attr.ConverterTypeName ), false );
}
Это просто случай применения преобразователя типов вручную