Упомянутые выше решения больше не работали для меня, поэтому я публикую свое решение здесь (я использовал расширение для String):
extension String {
func matches(_ regex: String) -> Bool {
return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
}
Пример:
if str.matches("^[a-zA-Z0-9._-]{1,30}$") {
//...
}
Причина, по которой он не обновляется, заключается в том, что LINQ-to-SQL не реализует INotifyCollectionChanged, поэтому WPF не имеет возможности узнать, что ItemsSource был обновлен. Наименее страшный способ исправить это - скопировать результаты LINQ-to-SQL в ObservableCollection - когда вы выполняете Insert, также добавляйте их в наблюдаемую коллекцию. Затем вы увидите обновление.
Проблема в том, что вам необходимо обновить контекст данных LINQ-to-SQL. DataContext не распознает новую строку должным образом даже после изменений отправки. Вам нужно избавиться от имеющегося у вас DataContext и создать новый. В большинстве случаев DataContext следует использовать для одной короткой операции, а не как длительный объект.
Или просто вызовите код поиска еще раз (обычно это кнопка поиска)> В моем случае я решил эту проблему вот так.