Me gusta la respuesta de mkoertgen.
Aquí hay un ejemplo adaptado para un proxy IValueConverter en VB.NET que funcionó para mí. Mi recurso "VisibilityConverter" se incluye ahora como DynamicResource y se reenvía con el ConverterProxy "VisibilityConverterProxy".
Uso:
...
xmlns:binding="clr-namespace:Common.Utilities.ModelViewViewModelInfrastructure.Binding;assembly=Common"
...
<ResourceDictionary>
<binding:ConverterProxy x:Key="VisibilityConverterProxy" Data="{DynamicResource VisibilityConverter}" />
</ResourceDictionary>
...
Visibility="{Binding IsReadOnly, Converter={StaticResource VisibilityConverterProxy}}"
Código:
Imports System.Globalization
Namespace Utilities.ModelViewViewModelInfrastructure.Binding
''' <summary>
''' The ConverterProxy can be used to replace StaticResources with DynamicResources.
''' The replacement helps to test the xaml classes. See ToolView.xaml for an example
''' how to use this class.
''' </summary>
Public Class ConverterProxy
Inherits Freezable
Implements IValueConverter
#Region "ATTRIBUTES"
'Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
Public Shared ReadOnly DataProperty As DependencyProperty =
DependencyProperty.Register("Data", GetType(IValueConverter), GetType(ConverterProxy), New UIPropertyMetadata(Nothing))
''' <summary>
''' The IValueConverter the proxy redirects to
''' </summary>
Public Property Data As IValueConverter
Get
Return CType(GetValue(DataProperty), IValueConverter)
End Get
Set(value As IValueConverter)
SetValue(DataProperty, value)
End Set
End Property
#End Region
#Region "METHODS"
Protected Overrides Function CreateInstanceCore() As Freezable
Return New ConverterProxy()
End Function
Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As CultureInfo) As Object Implements IValueConverter.Convert
Return Data.Convert(value, targetType, parameter, culture)
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Data.ConvertBack(value, targetType, parameter, culture)
End Function
#End Region
End Class
Espacio de nombres Fin
me sale el siguiente error de compilación: 'Desconocido propiedad 'convertidor' para el tipo 'MS.Internal.Markup.MarkupExtensionParser + UnknownMarkupExtension' ' – bitbonk
buena idea, pero no funciona. Hay una discrepancia: 'ProvideValue' es llamado una vez por el analizador XAML y no debe convertir nada. En su lugar, debe proporcionar a la propiedad de dependencia algo que permita la conversión. – jeromerg
¿Por qué no usó el enfoque de @mkoertgen, considerando que está denegando su artículo? ¿Hay algún tipo de inconveniente? – Dzyann