WPF列表框项目已清除,但重新启动时重新出现

时间:2011-01-26 22:02:22

标签: c# wpf

我在Wpf中有一个列表框。我直接将项目添加到此列表框中。我添加了一个清除按钮,它运行items.clear()命令并删除所有项目。但是,重新启动应用程序时,所有项目都会回到列表中!它们存储在某个地方,如果存储,我该如何禁用它?

另一个问题:是否可以将datatemplate应用于直接添加项目但未绑定项目的列表框?

代码示例:

<ListBox x:Name="Results" Margin="222,31,8,44" />

Midiinput.ChannelMessageReceived += delegate(object sender, ChannelMessageEventArgs e)
{
    string result = e.Message.MessageType.ToString() + " " + e.Message.Command.ToString() + " " + e.Message.Data1.ToString() + " " + e.Message.Data2.ToString();
    Results.Items.Add(result); Clearbutton.IsEnabled = true;
};

3 个答案:

答案 0 :(得分:0)

列表框项目不会保留(实际上与任何其他属性一样)。 你如何填充你的列表框?有没有后端存储?

我猜你的应用程序只是在标记中声明了一些项目,当应用程序启动时,列表项会被解析。

答案 1 :(得分:0)

如果重新启动应用时项目返回,我认为以下情况之一是正确的: 1)您在DESIGN时填充列表框,方法是使用Items属性并手动将字符串输入集合。 2)您正在运行代码,从代码或文件中的存储位置填充列表。

-C

答案 2 :(得分:0)

关于你的第二个问题

  

可以将datatemplate应用于a   列表框中的项目是直接的   添加而不是绑定?

在UI生成期间,ListBox的ItemTemplate被复制到ListBoxItem的ContentTemplate。但是,直接添加ListBoxItems时,ItemConmplate将被ItemsControl的容器类型(ListBoxItem)的项目忽略。因此,您必须使用ContentTemplate代替ListBoxItem。这是一个例子

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock Foreground="Green" Text="{Binding}"/>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBoxItem Content="Item 1"/>
    <ListBoxItem Content="Item 2"/>
    <ListBoxItem Content="Item 3"/>
</ListBox>

针对重新启动应用时重新显示的项目的问题:

我会尝试在代码隐藏中找到向ListBox添加项目的所有位置(搜索Results.Items.Add)。添加断点到每个位置,以便在添加它们时在调试器中查看。除非你实现它,否则ListBox本身将没有关闭它时的外观。

如果这不起作用,请尝试将ListBox的名称更改为ResultsTest或其他内容,通过注释掉引用ListBox的所有代码并再次运行程序来编译并修复所有错误。这应该让ListBox中没有任何项目。在此之后,开始逐步取消注释代码,直到找到错误的位置。