列表框不是使用绑定填充

时间:2017-05-10 06:32:13

标签: c# wpf xaml mvvm listbox

我正在尝试使用mvvm模式转换c#wpf中的现有程序。

第一部分是选择要处理的文件的文件夹位置并填充列表框

我在这里找到了一个使用Mvvm Light的例子:WPF OpenFileDialog with the MVVM pattern?

上面链接中的示例是选择文件夹。

这是我项目的结构
enter image description here

这是我的FileListView.xaml的代码

<UserControl x:Class="MvvmLight1.Views.FilesListView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:MvvmLight1.Views"
             mc:Ignorable="d" 
             d:DesignHeight="300" Width="730.029">

    <Grid>
        <ListBox ItemsSource="{Binding FileNames}" Margin="5,5,5,5"/>

    </Grid>
</UserControl>

这是我的列表,它位于ViewModel \ OpenFileDialogVM.cs

public System.Collections.ObjectModel.ObservableCollection<string> FileNames { get; }
    = new System.Collections.ObjectModel.ObservableCollection<string>();

这是我填充列表的代码。但它不起作用

var files = System.IO.Directory.EnumerateFiles(SelectedPath, "*", System.IO.SearchOption.AllDirectories);

            FileNames.Clear();

            foreach (var file in files)
            {
                FileNames.Add(file);
                Console.WriteLine(file);
            }

上面的代码出了什么问题?

代码更新:

在我的文件夹结构中,我有ViewModel文件夹,在其中我有OpenFileDialogVm.css enter image description here

但为什么IDE只识别ViewModelLocator。

我甚至构建项目。

我甚至在FileListView用户控件的CodeBehind中设置了DataContext,但它仍然没有填充列表框

public partial class FilesListView : UserControl
    {
        public FilesListView()
        {
            DataContext = new OpenFileDialogVM();
            InitializeComponent();

        }
    }

1 个答案:

答案 0 :(得分:2)

将其添加到您的UserControl:

<UserControl
.....
xmlns:viemodels="clr-namespace:MvvmLight1.ViewModels"
/>
    <UserControl.DataContext>
        <viemodels:OpenFileDialogVM/>
    </UserControl.DataContext>
....
</UserControl>