在 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
集合。“Credit”属性正确显示,但 OwnerName 属性没有。相反,我收到一个绑定错误:
错误 40:BindingExpression 路径错误:在“对象”“ForDisplay”(HashCode=449124874)上找不到“OwnerName”属性。绑定表达式:路径=所有者名称;DataItem='ForDisplay' (HashCode=449124874); 目标元素是'TextBlock'(名称=txtOwnerName');目标属性是“文本”(类型“字符串”)
我不明白为什么这是试图在 ForDisplay 类中查找 OwnerName 属性,而不是在 ForDisplay OwnerData 属性的 Owner 类中。
编辑
它似乎与使用自定义控件有关。如果我将相同的属性绑定到 a 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>