В 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; }
}
В моем окне у меня есть ItemsControl со следующим (обрезано для ясности):
<ItemsControl ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyDisplayControl
OwnerName={Binding OwnerData.OwnerName}
Credit={Binding Credit} />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Затем я получаю набор отображаемой информации из слоя данныхи установите DataContext
из ItemsControl
для этой коллекции.Свойство «Кредит» отображается правильно, а свойство OwnerName - нет.Вместо этого я получаю ошибку привязки:
Ошибка 40: ошибка пути BindingExpression: свойство 'OwnerName' не найдено в 'object' '' ForDisplay '(HashCode = 449124874)'.BindingExpression: Path = OwnerName;DataItem = 'ForDisplay' (HashCode = 449124874);целевым элементом является TextBlock (Name = txtOwnerName ');Свойство target имеет значение «Text» (тип «String»)
. Я не понимаю, почему выполняется поиск свойства OwnerName в классе ForDisplay, а не в классе Owner из ForDisplay.Свойство OwnerData.
Редактировать Похоже, что оно связано с использованием пользовательского элемента управления.Если я связываю те же свойства с 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>