When declaring converters in a WPF application, should I:
<Application.Resources/>
) so it's available to the entire applicationPage
/Window
/ResourceDictionary
/UserControl
etc. in their Resources
sectionRegarding readability, method 1 seems the best to me, but my question is about performance. Which method is the most resource efficient in terms of performance, memory, etc.?
Well, I just don't declare them in xaml at all. Instead, I additionally derive a converter of mine from MarkupExtension
. Like this:
public class MyValueConverter : MarkupExtension, IValueConverter
{
private static MyValueConverter _converter = null;
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (_converter == null) _converter = new MyValueConverter();
return _converter;
}
public object Convert
(object value, Type targetType, object parameter, CultureInfo culture) { }
public object ConvertBack
(object value, Type targetType, object parameter, CultureInfo culture) { }
}
This allows me to use my converter anywhere, like this:
Source="{Binding myValue, Converter={converters:MyValueConverter}}"
where converters is the namespace in which I have declared my converter.
Learned this trick from an old stackoverflow thread only.