我正在尝试使用mvvm模式转换c#wpf中的现有程序。
第一部分是选择要处理的文件的文件夹位置并填充列表框
我在这里找到了一个使用Mvvm Light的例子:WPF OpenFileDialog with the MVVM pattern?
上面链接中的示例是选择文件夹。
这是我的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
但为什么IDE只识别ViewModelLocator。
我甚至构建项目。
我甚至在FileListView用户控件的CodeBehind中设置了DataContext,但它仍然没有填充列表框
public partial class FilesListView : UserControl
{
public FilesListView()
{
DataContext = new OpenFileDialogVM();
InitializeComponent();
}
}
答案 0 :(得分:2)
将其添加到您的UserControl:
<UserControl
.....
xmlns:viemodels="clr-namespace:MvvmLight1.ViewModels"
/>
<UserControl.DataContext>
<viemodels:OpenFileDialogVM/>
</UserControl.DataContext>
....
</UserControl>