Как видно по ответам, пока мнения разделились. По правде говоря, лучшей практики не существует (я получаю в своем бонете информацию о «лучшей практике» в мире Silverlight, она слишком молода, чтобы лучшая практика была по-настоящему известна).
На самом деле реальность такова, что вы не можете установить «контекст данных» в Xaml. Если вы на самом деле не создаете экземпляр объекта следующим образом: -
<UserControl>
<UserControl.DataContext>
<local:MyDataProviderThing />
В конечном итоге что-то внешнее должно назначать свойство DataContext прямо или косвенно через другое свойство или через привязку (как в ответе Стефана). Это внешний контекст, который определяет, имеет ли смысл делать это в Xaml или нет. Многие решения MVVM используют привязку в Xaml, в некоторых случаях просто для того, чтобы вообще не было никакого кода в выделенном коде, вместо того, чтобы действительно быть «лучше». Другие устанавливают DataContext в коде, используя базовый класс, из которого происходит ваш элемент управления.