Мне кажется, что первый вариант интересен, поскольку он предоставляет хорошую и понятную возможность использовать класс для различных вариантов задачи в сочетании с одноэлементным.Представьте себе преобразователь значений видимости, подобный этому:
public class VisibilityConverter : IValueConverter
{
private static readonly VisibilityConverter defaultInstance = new VisibilityConverter();
public static VisibilityConverter Default = new VisibilityConverter();
public static VisibilityConverter InverseBoolean = new VisibilityConverter() { Inverse = true };
public bool Inverse { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var isVisible = value != null
&& value.GetType() == typeof(bool)
&& (bool)value;
if (Inverse)
{
isVisible = !isVisible;
}
return isVisible ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
}
Затем его можно легко использовать по умолчанию и в инверсном режиме:
Converter={x:Static converters:VisibilityConverter.Default}
Converter={x:Static converters:VisibilityConverter.InverseBoolean}