我正在尝试将文本文件中的数据(以及这些文件的名称)绑定到C#Metro风格应用程序中的ListBox。
我已经检查了Metro样本 - 尽管如此,我还是没有太多意义。我开始时对XAML来说相对较新,抛出Metro风格的应用只会增加混乱。
对于在WinForms中这么简单的任务,我觉得我正在尝试编写自己的操作系统!
有人可以帮我一点吗?我搜索过并搜索过,但我最终找到了相同的旧教程/文档;也许这只是我,但我觉得这个领域缺乏文档。也许它还没完成呢?
任何帮助都将非常感激:)
答案 0 :(得分:2)
V声明一个字典并循环遍历所有文件,将名称作为键添加,并将文件内容作为值。
在XAML中,然后将列表框绑定到字典中的项目,并将displaymemberpath设置为KeyValuePair的键。
选择更新将显示您的内容的其他控件。 我会看看我是否可以在代码中为你做一个例子。
这里的示例请不要看样式:)使用MVVM 我的ViewModel
namespace WPFTest.ViewModels
{
using System.IO;
using System.Windows.Input;
using Microsoft.Practices.Prism.Commands;
public class MainViewModel : NotificationObject
{
public MainViewModel()
{
FileList = new Dictionary<string, string>();
FillFileListCommand = new DelegateCommand(FillFileListExecuted);
}
private Dictionary<string, string> fileList;
public Dictionary<string,string> FileList
{
get
{
return fileList;
}
set
{
fileList = value;
RaisePropertyChanged(()=>FileList);
}
}
public ICommand FillFileListCommand { get; set; }
private void FillFileListExecuted()
{
var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var files = Directory.GetFiles(path, "*.txt");
var dict = new Dictionary<string, string>();
foreach (var file in files)
{
using (var reader = new StreamReader(file))
{
var text = reader.ReadToEnd();
dict.Add(file, text);
}
}
FileList = dict;
}
}
}
xaml
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="347*" />
<RowDefinition Height="414*" />
</Grid.RowDefinitions>
<ListBox Height="701" Name="listBox1" Width="302" Margin="12,48,664,0" VerticalAlignment="Top" ItemsSource="{Binding FileList}" DisplayMemberPath="Key" Grid.RowSpan="2" />
<TextBlock Height="737" HorizontalAlignment="Left" Margin="320,12,0,0" Name="textBlock1" Text="{Binding ElementName=listBox1, Path=SelectedItem.Value}" VerticalAlignment="Top" Width="646" TextWrapping="Wrap" Grid.RowSpan="2" />
<Button Content="Fill" Height="30" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="302" Command="{Binding FillFileListCommand}" />
</Grid>
在xaml的代码隐藏中说
DataContext = new MainViewModel();