在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>然后从数据层获取显示信息的集合,并将ItemsControl的ItemsControl设置为该集合。"Credit“属性将正确显示,但OwnerName属性不会显示。相反,我得到一个绑定错误:
错误40: BindingExpression路径错误:在'object‘ForDisplay’(HashCode=449124874)‘上找不到'OwnerName’属性。BindingExpression:Path=OwnerName;DataItem=“ForDisplay”(HashCode=449124874);目标元素为“TextBlock”(Name=txtOwnerName);目标属性为“Text”(键入“String”)
我不明白为什么要在OwnerName类中寻找ForDisplay属性,而不是从ForDisplay OwnerData属性中查找Owner类中的属性。
编辑似乎与使用自定义控件有关。如果我将相同的属性绑定到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>发布于 2010-06-17 15:37:32
您确定您在这里发布的代码是您在解决方案中使用的代码吗?因为,这段代码适用于我:
XAML
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding OwnerData.OwnerName}"></TextBlock>
<TextBlock Text="{Binding Credit}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>窗口加载事件
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;https://stackoverflow.com/questions/3063031
复制相似问题