The problem lies here: [Bindable(event=LOCALE_CHANGED_EVENT_TYPE)]
This is a preprocessor rule that hasn't done a resolve on its references yet. Effectively what the [Bindable] does is to write an event listener for you (via a ChangeWatcher elsewhere), and since they are based on 'magic strings', you're statement would need to look similar to:
public static const LOCALE_CHANGED_EVENT:String = "localeChangedEvent";
[Bindable(event="localeChangedEvent")]
function foo(param:int):void
{
var oldValue:int = _fooFighters;
_fooFighters = param;
if (oldValue != param) dispatch(new Event(LOCALE_CHANGED_EVENT));
}
Now this is over-simplified, but you can hopefully get the idea. As for why it works in the same mxml as the DataGrid, I can only speculate that your dispatched event isn't a defined Event Class but something similar above - just a defined string? Hard to say.