使用Metro ListBox绑定文件名和内容

时间:2012-09-14 06:35:42

标签: c# wpf xaml data-binding microsoft-metro

我正在尝试将文本文件中的数据(以及这些文件的名称)绑定到C#Metro风格应用程序中的ListBox。

我已经检查了Metro样本 - 尽管如此,我还是没有太多意义。我开始时对XAML来说相对较新,抛出Metro风格的应用只会增加混乱。

对于在WinForms中这么简单的任务,我觉得我正在尝试编写自己的操作系统!

有人可以帮我一点吗?我搜索过并搜索过,但我最终找到了相同的旧教程/文档;也许这只是我,但我觉得这个领域缺乏文档。也许它还没完成呢?

任何帮助都将非常感激:)

1 个答案:

答案 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();