設計された目的でvalueconverterを使用している場合は、「間違っている」わけではありません。個人的には、列挙値をわかりやすい文字列に変換するために使用しますが、文字列を値コンバーターにハードコーディングするのではなく、VCは列挙値を使用してリソースファイルから文字列を取得します。
あなたが言及する特定のケースでは、私はあなたが持っているVCの量を減らすために少し違ったやり方をします-あなたはたった1つでそれをすることができます。あなたがしているのは、値を既知の文字列に直接代入/挿入することです。使用可能なを使用して開始し、ConverterParameter
それを使用してリソースファイル内の文字列のIDを渡すことができます。その後、VCに渡された値を、VCによって指定された文字列に挿入できますConverterParameter
。簡単な擬似コードの例を次に示します。
public class MyConverter : IValueConverter
{
public MyConverter()
{
_rm = new ResourceManager("[my_assembly_name].Resources.strings", Assembly.GetExecutingAssembly());
}
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (parameter is string && !string.IsNullOrEmpty((string)parameter))
{
string z = _rm.GetString((string)parameter);
if (z != null)
{
return string.Format(z, value);
}
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
ResourceManager _rm;
}
そして、このコンバーターは次のように使用します。
<TextBlock Text={Binding someNumericValue, Converter={StaticResource MyConverter}, ConverterParameter=[key_to_resource_string]} />
また、WPF4-IIRCを見てください。これには、バインディング式の一部としてフォーマット文字列を指定できる機能があります。これも役立つ場合があります。