なぜこれが失敗するのですか?
ComboBox を含む UserControl があります。
選択がなされない場合にユーザーが検証を追加できる「必須」というプロパティがあります。
だから私はこれをユーザーコントロールに持っています:
public static DependencyProperty MandatoryProperty
= DependencyProperty.Register("Mandatory", typeof(bool), typeof(CountyPicker),
new PropertyMetadata((bool)false, OnChangedMandatoryByBinding));
private static void OnChangedMandatoryByBinding
(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var value = (bool)e.NewValue;
((CountyPicker)d).OnChangedMandatoryByBinding(value);
}
public bool Mandatory
{
get { return (bool)GetValue(MandatoryProperty); }
set { SetValue(MandatoryProperty, value); }
}
public void OnChangedMandatoryByBinding(bool value)
{
var binding = BindingOperations.GetBinding
(TheComboBox, ComboBox.SelectedItemProperty);
binding.ValidationRules.Clear();
if (value == true) // strange that I need this without getting a warning
{
binding.ValidationRules.Add(new NotNullValidator());
}
}
xaml には以下が含まれます。
<UserControl x:Class="Foo.Controls.Pickers.CountyPicker"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ComboBox Name="TheComboBox"
KeyDown="TheComboBox_KeyDown"
SelectedItem="{Binding County,Mode=TwoWay}" />
</UserControl>
ただし、Mandatory の値は次のように設定されています。
<p:CountyPicker Mandatory="True"
CountyCode="{Binding customer.CountyCode, Mode=TwoWay}"/>
...検証は行われていないようです。NotNullValidator:s Validate メソッドにブレークポイントを設定しましたが、ヒットしません。