 <p>Does the compiler really let you assign <code>object</code> to <code>Customer</code> without a cast? </p> <p>Anyway, <code>DataContext</code> won't be initialized yet in the constructor. </p> <p>You could handle the <code>DataContextChanged</code> event, which will be raised whenever <code>DataContext</code> changes -- in this case, that'll probably just be when it's assigned in the course of instantiating the <code>DataTemplate</code> that creates <code>MyUserControl</code>. And that's just what you want. </p> <p>XAML</p> <pre><code>&lt;UserControl ... DataContextChanged="MyUserControl_DataContextChanged" ... </code></pre> <p>C#</p> <pre><code>private Customer _customer; void MyUserControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { _customer = (Customer)DataContext; } </code></pre> <p>Or you could just cast <code>DataContext</code> to <code>Customer</code> whenever you need to use it. Check for <code>null</code>, of course. You didn't say what you're doing with <code>Customer</code> so it's hard to be sure when you would need to do something with it. </p>