The reason that this breaks searching is because DialogViewController assigns a custom UISearchBarDelegate on the UISearchBar.
When you connect to an event, that clobbers the Delegate and replaces it with a special UISearchBarDelegate that forwards all delegate methods to events.
In other words, you cannot mix and match delegates with events on the same control.
One possible solution (if you don't want to patch MonoTouch.Dialog itself), is to replace the existing sb.Delegate with your own custom UISearchBarDelegate which could implement the SearchScope methods and forward everything else to the UISearchBarDelegate that was already set previously.
for example:
public class MySearchBarDelegate : UISearchBarDelegate
{
UISearchBarDelegate original;
MyDialogViewController dvc;
public MySearchBarDelegate (MyDialogViewController dvc, UISearchBarDelegate original)
{
this.original = original;
}
public override void SelectedScopeButtonIndexChanged (UISearchBar searchBar, int selectedScope)
{
dvc.Update ();
}
public override void OnEditingStarted (UISearchBar searchBar)
{
original.OnEditingStarted (searchBar);
}
public override void OnEditingStopped (UISearchBar searchBar)
{
original.OnEditingStopped (searchBar);
}
public override void TextChanged (UISearchBar searchBar, string searchText)
{
original.TextChanged (searchBar, searchText);
}
public override void CancelButtonClicked (UISearchBar searchBar)
{
original.CancelButtonClicked (searchBar);
}
public override void SearchButtonClicked (UISearchBar searchBar)
{
original.SearchButtonClicked (searchBar);
}
}