尽管在编写 Winforms 应用程序方面有一定的经验,但 WPF 的“模糊性”在最佳实践和设计模式方面仍然让我困惑。
尽管在运行时填充我的列表,但我的列表框显示为空。
我已按照以下简单说明进行操作这篇有用的文章 http://merill.net/2009/10/wpf-checked-listbox/无济于事。我怀疑我错过了某种DataBind()
方法,我告诉列表框我已完成修改底层列表。
在我的 MainWindow.xaml 中,我有:
<ListBox ItemsSource="{Binding TopicList}" Height="177" HorizontalAlignment="Left" Margin="15,173,0,0" Name="listTopics" VerticalAlignment="Top" Width="236" Background="#0B000000">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的代码隐藏中,我有:
private void InitializeTopicList( MyDataContext context )
{
List<Topic> topicList = ( from topic in context.Topics select topic ).ToList();
foreach ( Topic topic in topicList )
{
CheckedListItem item = new CheckedListItem();
item.Name = topic.DisplayName;
item.ID = topic.ID;
TopicList.Add( item );
}
}
通过追踪,我知道其中填充了四个项目。
EDIT
我变了TopicList
to an ObservableCollection
。它仍然不起作用。
public ObservableCollection<CheckedListItem> TopicList;
EDIT #2
我做了两项有帮助的更改:
在 .xaml 文件中:
ListBox ItemsSource="{Binding}"
在填充列表后的源代码中:
listTopics.DataContext = TopicList;
我得到了一个列表,但当我刷新这些复选框时,它不会自动更新复选框状态。我怀疑我进一步阅读会解决这个问题。