在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
的{{1}}设置为此集合。 “Credit”属性正确显示,但OwnerName属性不正确。相反,我收到了绑定错误:
错误40:BindingExpression路径 错误:找不到“OwnerName”属性 在'对象'''ForDisplay' (的HashCode = 449124874)”。 BindingExpression:路径= OWNERNAME; 的DataItem = 'ForDisplay' (的HashCode = 449124874);目标要素 是'TextBlock'(Name = txtOwnerName'); target属性是'Text'(类型 '字符串')
我不明白为什么这会尝试在ForDisplay类中查找OwnerName属性,而不是在ForDisplay OwnerData属性的Owner类中查找。
修改
它似乎与使用自定义控件有关。如果我将相同的属性绑定到ItemsControl
,它们就能正常工作。
TextBlock
答案 0 :(得分:7)
您确定此处发布的代码是您在解决方案中使用的代码吗?因为,这段代码对我有用:
XAML
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding OwnerData.OwnerName}"></TextBlock>
<TextBlock Text="{Binding Credit}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Window的已加载事件
ObservableCollection<ForDisplay> items = new ObservableCollection<ForDisplay>();
for (int i = 0; i < 10; i++)
{
items.Add(new ForDisplay() { OwnerData = new Owner() { OwnerId = i + 1, OwnerName = String.Format("Owner #{0}", i + 1) }, Credit = i + 1 });
}
DataContext = items;