首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ItemsControl ItemTemplate结合

ItemsControl ItemTemplate结合
EN

Stack Overflow用户
提问于 2010-06-17 15:21:35
回答 1查看 45.7K关注 0票数 17

在WPF4.0中,我有一个类包含其他类类型作为属性(合并多个数据类型以供显示)。类似于:

代码语言:javascript
复制
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,它有以下内容(为清楚起见而剪裁):

代码语言:javascript
复制
<ItemsControl ItemsSource={Binding}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <local:MyDisplayControl 
                OwnerName={Binding OwnerData.OwnerName}
                Credit={Binding Credit} />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

然后从数据层获取显示信息的集合,并将ItemsControlItemsControl设置为该集合。"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,它们将正确工作。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2010-06-17 15:37:32

您确定您在这里发布的代码是您在解决方案中使用的代码吗?因为,这段代码适用于我:

XAML

代码语言:javascript
复制
<ItemsControl ItemsSource="{Binding}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding OwnerData.OwnerName}"></TextBlock>
                <TextBlock Text="{Binding Credit}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

窗口加载事件

代码语言:javascript
复制
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;
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3063031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档