【问题标题】:How do I get the instance of a templated item from a databound ItemsControl? (WPF)如何从数据绑定的 ItemsControl 中获取模板化项目的实例? (WPF)
【发布时间】:2008-12-05 03:04:49
【问题描述】:

我有一个<ItemsControl> 和一个自定义<DataTemplate>(还有一个自定义<ItemsPanelTemplate>,它只是一个WrapPanel),通过ItemsSource 绑定到一个简单的可观察字符串集合。

DataTemplate 仅包含一个自定义 UserControl 的实例,其属性通过 {Binding} 绑定到字符串。

问题是因为我的数据项只是字符串,我需要直接以编程方式访问我的 UserControl 的实例,但我似乎无法弄清楚如何!

我试过了:

var item = tagBar.Items[ tagBar.Items.Count - 1 ];

...但这只是返回字符串。另外:

var item2 = tagBar.ItemContainerGenerator.ContainerFromIndex( tagBar.Items.Count - 1 );

...返回一个ContentPresenter,我不知道如何处理ContentPresenter 来访问我的UserControl 的实例。

??

这类似于this question,但它从未得到正确回答,而且它也是 Silverlight 特有的,而这是 WPF。

【问题讨论】:

  • 在有人建议之前, item2.Content 也只是返回字符串。 叹息

标签: wpf data-binding datatemplate itemscontrol contentpresenter


【解决方案1】:

我发布的答案over here 涉及将元素集中在 DataTemplate 中,但它应该提供您需要的代码。它涉及使用 DataTemplate 上的 FindName 方法在其中查找控件。如果你给你的 UserControl 一个名字,你应该是对的。

【讨论】:

  • 太棒了,做到了!关键是将item(或者更确切地说是我上面的代码中的item2)传递回tagBar.ItemTemplate.FindName()(当然,给UserControl一个可以找到的名字)。我也会小心 IsLoaded 位,尽管需要它有点蹩脚。谢谢!
  • @chaiguy1337 -- 自从你写了之后,似乎已经添加了反引号支持,因为文本现在已经格式化了。
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2012-07-25
  • 2013-04-13
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多