0

なぜこれが失敗するのですか?

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 メソッドにブレークポイントを設定しましたが、ヒットしません。

4

0 に答える 0