I have defined the following DataTemplate for ListBox items in an external resource dictionary:
DataTemplate
ListBox
Have a look at this question and answer.
I think that using Commands is the best option.
EDIT A good tutorial