次の System.Windows.ValidationRule を使用しています。
public class XXXValidationRule : ValidationRule
{
public object FooObject { get; set;}
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
Bar barObject = this.FooObject.BarObject;
}
}
私のXAMLはこのように表示されます。
<ui:Windows.Resources>
<ResourceDictionary>
<viewModel:XXXValidationRule x:key="xxxValidationRule"/>
</ResourceDictionary>
</ui:Windows.Resources>
...
<TextBox.Text>
<Binding Path="..." UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<viewModel:XXXValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
ここまでは順調ですね。XAML ダイアログのコード ビハインドで、次のように ValidationRule を初期化します。
public partial class XamlDialog : System.Windows.Window
{
private System.Windows.Controls.ValidationRule xxxValidationRule;
public XamlDialog()
{
InitializeComponent();
InitializeResources();
}
public void InitializeResources()
{
this.xxxValidationRule = (ValidationRule)this.Resources["xxxValidationRule"];
this.xxxValidationRule.FooObject= new FooObject();
}
...
}
ポイントは、XXXValidationRule.Validate がトリガーされると、FooObject プロパティが常に null になることです。
Property FooObject の値型 int を使用すると、同じ効果が得られます。
値の型 int を引き続き使用し、次のように XAML でプロパティを明示的に設定すると、検証規則内で正しい値 (99) を受け取ります。
<Binding.ValidationRules>
<viewModel:XXXValidationRule FooObject="99"/>
</Binding.ValidationRules>
...
まず、ValidationRule は値型のみをサポートしていますか、それとも上記のように参照型を操作する方法はありますか? 次に、そのようなプロパティを XAML で明示的に設定する必要がありますか、それともコード ビハインドで設定する方法はありますか?
手伝ってくれてありがとう :-)