INotifyDataErrorInfo インターフェイスを正常に適用し、AutoCompleteBox にバインドした人はいますか。これを試しましたが、応答がありません。コントロールは、他のコントロールのように応答しません。つまり、赤い境界線と警告ツールチップが表示されます。また、Validation Summary コントロールにエラーが表示されることもありません。
標準の TextBoxes と DatePickers を正常にセットアップしました。これらは、インターネット上の人々から親切に提供された多くの例に従って完全に動作します。
画面の一貫性のためにこれに対する答えがあれば良いでしょう。また、 INotifyDataErrorInfo に付属する HasErrors プロパティにバインドして、保存の準備ができたらボタンを有効にしたいので、これなしでは実行できません。これらのボックスが正しいことを確認する追加のコード。
現時点では、MVVMLight EventToCommand バインディングを使用して LostFocus イベントを登録することで、これらを別の方法で処理しています。
<sdk:AutoCompleteBox x:Name="TransferTypeTextBox" SelectedItem="{Binding Path=SelectedTransferType, Mode=TwoWay, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}" ItemsSource="{Binding Path=TransferTypes}" IsTextCompletionEnabled="True" Grid.Row="1" Grid.Column="1" Margin="0,3" Width="238" HorizontalAlignment="Left" FontFamily="/PtrInput_Silverlight;component/Fonts/Fonts.zip#Calibri" FontSize="13.333">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<cmd:EventToCommand Command="{Binding TransferTypeLostFocusCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</sdk:AutoCompleteBox>
ViewModel では、次に RoutedEventArgs.OriginalSource を TextBox にキャストし、そのようにテキストを取得します。これにより、ボックスが空であるか、ボックスのリスト内の項目と一致しない限り、ユーザーがボックスを離れることができなくなります。
private void OnTransferTypeLostFocus(RoutedEventArgs e)
{
System.Windows.Controls.TextBox box = (System.Windows.Controls.TextBox)e.OriginalSource;
// If user inputs text but doesn't select one item, show message.
if (this.Ptr.TransferType == null && !string.IsNullOrEmpty(box.Text))
{
MessageBox.Show("That is not a valid entry for Transfer Type", "Transfer type", MessageBoxButton.OK);
box.Focus();
}
}