【发布时间】:2011-07-28 21:07:32
【问题描述】:
如果我创建一个扩展 WPF 的 ListBoxItem 的类,创建这些对象的列表,尝试将列表绑定到 ListBox 的 ItemsSource,项目将不会显示:
<ListBox ItemsSource="{Binding Path=LbData, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
<ListBox.ItemTemplate>
<DataTemplate >
<TextBlock Text="{Binding Path=Display}" Margin="1" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
public partial class MainWindow : Window
{
public IEnumerable lbData = new List<LbItem>();
public IEnumerable LbData
{
get { return lbData; }
set { lbData = value; }
}
public MainWindow()
{
InitializeComponent();
LbData = new List<LbItem> { new LbItem("a"), new LbItem("b") };
}
}
public class LbItem : ListBoxItem
{
public string Display { get; private set; }
public LbItem(string v)
{
Display = v;
}
}
我是 WPF 新手,不明白为什么这应该是一个问题。 TIA
【问题讨论】:
-
你能定义“不会显示”吗?列表框是空的吗?或者,它是否显示了一些东西,而不是你想要的?
-
是的,抱歉,列表框将为空。在这个简单的示例中,从 ListBoxItem 中删除继承将使其工作。在实际项目中,我希望这些物品具有 LBI 的功能。
-
使用
ListBox.ItemContainerGenerator.ContainerFromItem(an item)可以达到效果,但如果不知道为什么不起作用就好了。
标签: c# wpf xaml listbox listboxitem