Кто-нибудь успешно применил интерфейс INotifyDataErrorInfo и привязал его к AutoCompleteBox. Я пробовал это, но я не получил ответа. Элемент управления не отвечает как другие элементы управления, то есть с красной рамкой и всплывающей подсказкой. Он также не отображает элемент управления Сводка проверки со своей ошибкой.
Я успешно настроил стандартные TextBoxes и DatePickers, и они ведут себя отлично, как и многие примеры, любезно предоставленные людьми в Интернете.
было бы хорошо, если бы был ответ на этот вопрос для согласованности моего экрана, а также потому, что я хотел бы просто привязать свойство HasErrors, которое поставляется с INotifyDataErrorInfo, чтобы включить кнопку, когда она готова к сохранению, и я не могу сделайте это без дополнительного кода, чтобы проверить правильность этих полей.
В настоящий момент я рассматриваю их по-разному, используя привязку 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();
}
}