はdouble
への結合は、次の検証エラーローカライズExceptionValidationRule
値...変換することができませんでしたを生成することができます。
ExceptionValidationRule
エラーを使用しておしゃべりより、次のとおりです。
入力文字列が正しい形式ではありませんでした。
値は多分もっとある...
には大きすぎるか小さすぎるのいずれかでした。彼らに、私がバウンドプロパティーセッターで自分を投げることができるものを加えてください。
ここで、これらのメッセージをローカライズしたいとします(2番目のバージョンが望ましい)。大きな驚きはありませんが、sourcesは何も役に立たないとは限りません(間違った場所を探していますか?)。
私は自分の検証規則を作ることができますが、もっと簡単な方法がありますか?
私の質問:ExceptionValidationRule
をローカライズすることはできますか?以下は
はmcve次のとおりです。
XAML:
<TextBox>
<TextBox.Text>
<Binding Path="TestDouble" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<!--<local:MyValidationRule />-->
<!--<ExceptionValidationRule />-->
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<Validation.ErrorTemplate>
<ControlTemplate>
<TextBlock Margin="0,20,0,0" Foreground="Red" Text="{Binding ErrorContent}" />
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
CS:
public partial class MainWindow : Window
{
public double TestDouble { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
}
public class MyValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo) => ValidationResult.ValidResult; // not used
public override ValidationResult Validate(object value, CultureInfo cultureInfo, BindingExpressionBase owner)
{
var bindingExpression = owner as BindingExpression;
if (bindingExpression != null)
{
var type = bindingExpression.ResolvedSource.GetType().GetProperty(bindingExpression.ResolvedSourcePropertyName).PropertyType;
if (type == typeof(double))
{
double result;
if (!double.TryParse((string)value, out result))
return new ValidationResult(false, "The value format is not recognized"); // custom message
}
... // and so on, for all types ?????
}
return base.Validate(value, cultureInfo, owner);
}
}
例外メッセージはローカライズされていません(http://stackoverflow.com/questions/209133/exception-messages-in-english) – ASh
@ASh、プロフェッショナルな翻訳者とその顧客が行うローカリゼーションについては忘れていました(彼らは 'ダブル 'などについて知ってはいけません)、メッセージテキストをカスタマイズすることについて考えてください。私の問題は、検証エラーを処理する方法です(ユーザーが入力しているときに制御できません).MyValidationRuleは非常に面倒です。 – Sinatr
明らかに、組み込みのExceptionValidationRuleクラスが実装される方法を変更することはできません。独自のカスタム検証ルールを実装する際に何が問題になりますか? Validateメソッドの中に必要な翻訳ロジックを置くことができます。無効な値を入力すると、sourceプロパティのsetterが決してヒットしないため、これを行う正しい方法です。 doubleプロパティはdouble値にしか設定できません。 – mm8