C#
WPF
Xaml

Converterを改良する

Converterの不満点

  • 変換する値をいちいちボックス化解除しなければならない。
  • XAMLでResourcesに登録しないと使えない。

改善点

  • ジェネリッククラスにして、変換前と変換後の型を指定できるようにする。
  • MarkupExtensionを継承して、Resourcesへの登録を不要にする。
コンバータ
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Markup;

namespace Sample {
    public abstract class BaseConverter<TSource, TTarget> : MarkupExtension, IValueConverter {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            => Convert((TSource)value, parameter, culture);

        public abstract TTarget Convert(TSource value, object parameter, CultureInfo culture);

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            => ConvertBack((TTarget)value, parameter, culture);

        public abstract TSource ConvertBack(TTarget value, object parameter, CultureInfo culture);

        public override object ProvideValue(IServiceProvider serviceProvider) => this;
    }
}

使い方

サンプル
using System;
using System.Globalization;
using System.Windows;

namespace Sample {
    public class CustomConverter : BaseConverter<int, int> {
        public override int Convert(int value, object parameter, CultureInfo culture)
            => value + 1;

        public override int ConvertBack(int value, object parameter, CultureInfo culture)
            => value - 1;
    }
}
XAML
<Window x:Class="Sample.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Sample"
        Title="MainView" Height="300" Width="300">
    <Grid>
        <TextBlock Text="{Binding Value, Converter={local:CustomConverter}}"/>
    </Grid>
</Window>