我在这里找到了一个如何实现ListBox复选框的简短解决方案: http://merill.net/2009/10/wpf-checked-listbox/
不幸的是我无法让它发挥作用。 我按照上面网站上的步骤操作,我还添加了一个按钮,这样当我点击它时就会填充一个列表。这是我的代码:
public class CsvFile
{
public string Name { get; set; }
public bool IsChecked { get; set; }
public List<CsvLine> Lines = new List<CsvLine>();
public CsvFile(string name)
{
Name = name;
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
var files = System.IO.Directory.GetFiles(Settings.Directory, "*.csv");
foreach (var file in files)
{
string fileName = System.IO.Path.GetFileNameWithoutExtension(file);
Settings.FilesList.Add(new CsvFile(fileName));
FilesListListBox.Items.Add(fileName);
}
}
public static class Settings
{
public static List<CsvFile> FilesList = new List<CsvFile>();
public static Directory = @"c:\";
}
这是我的ListBox的XAML:
<ListBox x:Name="FilesListListBox" ItemsSource="{Binding Settings.FilesList}" RenderTransformOrigin="0.507,0.492" Margin="359,111,24,83" >
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
说实话我不知道它应该如何工作,我没有任何XAML和WPF的经验,所以我无法找出什么是错的,虽然我觉得我有问题我将项目添加到ListBox的部分。
我希望有人可以帮助我。
答案 0 :(得分:0)
绑定不像C#那样工作。 Settings.FilesList
根本不访问静态类类Settings
,它会尝试在当前DataContext
上找到属性Settings
。 HierarchicalDataTemplate
也没有意义,因为数据不是分层的。
阅读data binding overview和data templating overview,而不是货物崇拜节目。还要了解调试绑定,您的代码肯定会导致绑定错误,这些错误在输出窗口中可见。