C# 如何从可观察的集合中正确填充列表框?
我简化了这一点,只是为了说明需要说明什么来证明这个问题,即虽然列表框中有8个项目,但它们没有内容,即“Name”不显示,它们只是空白。如果我在ItemSource刚刚被设置之后设置了一个断点,我可以看到源代码已经正确地填充了集合,所以我假设我的xaml一定出了问题。以下是代码和xaml:C# 如何从可观察的集合中正确填充列表框?,c#,silverlight,C#,Silverlight,我简化了这一点,只是为了说明需要说明什么来证明这个问题,即虽然列表框中有8个项目,但它们没有内容,即“Name”不显示,它们只是空白。如果我在ItemSource刚刚被设置之后设置了一个断点,我可以看到源代码已经正确地填充了集合,所以我假设我的xaml一定出了问题。以下是代码和xaml: public partial class MainPage : UserControl { private ObservableCollection<ToolboxItem> Toolbox
public partial class MainPage : UserControl
{
private ObservableCollection<ToolboxItem> ToolboxItems;
public MainPage()
{
InitializeComponent();
InitToolboxItems();
lstToolbox.ItemsSource = ToolboxItems;
}
private void InitToolboxItems()
{
ToolboxItems = new ObservableCollection<ToolboxItem>();
ToolboxItems.Add(new ToolboxItem(name: "Item1"));
ToolboxItems.Add(new ToolboxItem(name: "Item2"));
ToolboxItems.Add(new ToolboxItem(name: "Item3"));
ToolboxItems.Add(new ToolboxItem(name: "Item4"));
ToolboxItems.Add(new ToolboxItem(name: "Item5"));
ToolboxItems.Add(new ToolboxItem(name: "Item6"));
ToolboxItems.Add(new ToolboxItem(name: "Item7"));
ToolboxItems.Add(new ToolboxItem(name: "Item8"));
}
public struct ToolboxItem
{
public String Name;
public ToolboxItem(String name) { Name = name; }
}
}
<Grid x:Name="LayoutRoot" Background="White">
<ListBox Name="lstToolbox" Width="200" Height="280">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Width="100" Height="20" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
public部分类主页面:UserControl
{
私有可观察收集工具箱项目;
公共主页()
{
初始化组件();
InitToolboxItems();
lstToolbox.ItemsSource=ToolboxItems;
}
私有void InitToolboxItems()
{
ToolboxItems=新的ObservableCollection();
添加(新ToolboxItem(名称:“Item1”);
添加(新ToolboxItem(名称:“Item2”);
添加(新ToolboxItem(名称:“Item3”);
添加(新ToolboxItem(名称:“Item4”);
添加(新ToolboxItem(名称:“Item5”);
添加(新ToolboxItem(名称:“Item6”);
添加(新ToolboxItem(名称:“Item7”);
添加(新ToolboxItem(名称:“Item8”);
}
公共结构ToolboxItem
{
公共字符串名称;
公共ToolboxItem(字符串名称){name=name;}
}
}
即使这不是一个真正的问题(参见前面的注释),您的问题也源于这样一个事实,即ToolBoxItem上的字段“Name”必须是一个能够绑定到的属性。因此,将其更改为:
public string Name {get; set;}
它应该可以工作。大家好,欢迎来到Stack Overflow。请不要使用隐含的问题。如果你有一个实际的问题,用问号写出来。另外,我建议你将ListBox的ItemSource绑定到ToolboxItems,而不是在代码中设置它。您必须将ToolboxItems更改为公共属性,并(在代码中)将LayoutRoot的DataContext设置为“this”。(我想这是MVVM路线的起点,值得一看)。我在问题中添加了一个问号,并插入了“正确”一词。我的示例旨在为我的问题提供上下文,否则我试图填充我的列表框的方式可能会被任何人猜到?它确实有效,我只是回来说我将名称更改为一个属性,并且有效。我还将整个工具箱项结构也更改为类,不确定这是否真的重要。是的,它作为一个结构工作。我还必须抛弃构造函数,通过初始化器填充名称。