Как Джоэл говорит, что вы на правильном пути. В какой-то момент вам нужно явно установить DataContext в коде позади. Обычно это делается на верхнем уровне - как в вашем классе Window - и все последующие DataContext должны быть установлены через DataBindings.
В вашем конкретном примере вы говорите, что работаете над UserControl. Вы должны иметь возможность привязывать DataContext элемента управления UserDetails непосредственно к тому месту, где используется элемент управления, и, следовательно, вам не нужно устанавливать DataContext в коде позади для UserControl. По крайней мере, обычно пользователь вашего UserControl сообщает пользователю, какие данные использовать.
Допустим, у вас есть класс AllEmployees со свойством SelectedEmployee. Вы устанавливаете экземпляр этого объекта как DataContext в своем окне - в коде позади. Теперь вы хотите, чтобы в вашем окне отображались данные пользователя для SelectedEmployee. Элемент управления UserDetails создается при условии, что у него есть объект Employee, связанный с его DataContext, и теперь вы убедитесь, что он есть, установив его в DataBinding:
<Window xmlns:local="YourNamespaceHoldingTheUserDetailsControl>
..
<local:UserDetails DataContext={Binding SelectedEmployee} />
..
</Window>
Вы также можете добавить свойство Employee в свой класс UserDetails, который установит DataContext - если вы считаете, что это выглядит лучше в привязке.
Чтобы улучшить разделение между графическим интерфейсом пользователя и моделью вашего домена, вы должны определенно узнать о паттерне MVVM . Первоначально я несколько раз узнал от просмотра этого видео Джейсона Доллингера. Видео научит вас многим полезным вещам о WPF. Этот вопрос также, похоже, содержит несколько ценных ссылок на эту тему.
Удачи в изучении WPF! Это немного отличается от других структур GUI, поэтому кривая обучения может быть немного крутой. Но как только вы попадаете в это, это замечательное место!