Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从可观察的集合中正确填充列表框?_C#_Silverlight - Fatal编程技术网

C# 如何从可观察的集合中正确填充列表框?

C# 如何从可观察的集合中正确填充列表框?,c#,silverlight,C#,Silverlight,我简化了这一点,只是为了说明需要说明什么来证明这个问题,即虽然列表框中有8个项目,但它们没有内容,即“Name”不显示,它们只是空白。如果我在ItemSource刚刚被设置之后设置了一个断点,我可以看到源代码已经正确地填充了集合,所以我假设我的xaml一定出了问题。以下是代码和xaml: public partial class MainPage : UserControl { private ObservableCollection<ToolboxItem> Toolbox

我简化了这一点,只是为了说明需要说明什么来证明这个问题,即虽然列表框中有8个项目,但它们没有内容,即“Name”不显示,它们只是空白。如果我在ItemSource刚刚被设置之后设置了一个断点,我可以看到源代码已经正确地填充了集合,所以我假设我的xaml一定出了问题。以下是代码和xaml:

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路线的起点,值得一看)。我在问题中添加了一个问号,并插入了“正确”一词。我的示例旨在为我的问题提供上下文,否则我试图填充我的列表框的方式可能会被任何人猜到?它确实有效,我只是回来说我将名称更改为一个属性,并且有效。我还将整个工具箱项结构也更改为类,不确定这是否真的重要。是的,它作为一个结构工作。我还必须抛弃构造函数,通过初始化器填充名称。