我在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;
};
答案 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中没有任何项目。在此之后,开始逐步取消注释代码,直到找到错误的位置。