В WPF4.0 у меня есть класс, который содержит другие типы классов в качестве свойств (объединение нескольких типов данных для отображения). Что-то вроде:
public partial class Owner
{
     public string OwnerName { get; set; }
     public int    OwnerId   { get; set; }
}
partial class ForDisplay
{
    public Owner OwnerData { get; set; }
    public int Credit { get; set; }
}
В моем окне у меня есть ItemControl со следующим (обрезано для ясности):
<ItemsControl ItemsSource={Binding}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <local:MyDisplayControl 
                OwnerName={Binding OwnerData.OwnerName}
                Credit={Binding Credit} />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Затем я получаю набор отображаемой информации из слоя данных и устанавливаю DataContext из ItemsControl в эту коллекцию. Свойство "Кредит" отображается правильно, но свойство OwnerName не отображается. Вместо этого я получаю ошибку привязки:
Ошибка 40: BindingExpression path error: свойство OwnerName не найдено на 'object' '' ForDisplay ' (HashCode = 449124874). BindingExpression: Path = OwnerName; DataItem = 'ForDisplay' (HashCode = 449124874); целевой элемент is 'TextBlock' (Name = txtOwnerName '); target свойство - "Текст" (тип 'Строка')
Я не понимаю, почему это пытается найти свойство OwnerName в классе ForDisplay, а не в классе Owner из свойства ForDisplay OwnerData.
  Edit
Похоже, что это имеет какое-то отношение к использованию пользовательского элемента управления. Если я привяжу те же свойства к TextBlock, они будут работать правильно.
<ItemsControl ItemsSource={Binding}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <StackPanel>
              <local:MyDisplayControl 
                        OwnerName={Binding OwnerData.OwnerName}
                        Credit={Binding Credit} />
              <TextBlock Text="{Binding OwnerData.OwnerName}" />
              <TextBlock Text="{Binding Credit}" />
          </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
