【发布时间】:2014-08-29 22:52:49
【问题描述】:
碰壁,我是 MVVM 结构的新手,需要帮助来显示我的树。我需要显示一个像树一样的文件浏览器。在我搬到 mvvm 后,我的树停止显示。我制作了一个模型,其中包含用于构建文件树的方法。下面是我的模型。
public class UpdateContents
{
public string visibleName { get; set; }
public string fullPath { get; set; }
public bool isParent { get; private set; }
public bool? _isSelected { get; set; }
public UpdateContents _parent;
public List<UpdateContents> children { get; private set; }
public bool? isInitiallySelected { get; set; }
public UpdateContents(string path, bool parent)
{
fullPath = path;
visibleName = path.Substring(path.LastIndexOf('\\') + 1);
isParent = parent;
this.children = new List<UpdateContents>();
}
public void Initialize()
{
foreach (UpdateContents child in this.children)
{
child._parent = this;
child.Initialize();
}
}
public UpdateContents CreateDirectory(string directory)
{
UpdateContents groot = new UpdateContents(directory, true);
groot.isInitiallySelected = true;
CreateFiles(directory, groot);
foreach (string dir in Directory.EnumerateDirectories(directory))
{
UpdateContents babygroot = new UpdateContents(dir, true);
CreateFiles(dir, babygroot);
CreateFolders(dir, babygroot);
groot.children.Add(babygroot);
}
groot.Initialize();
return groot;
}
private void CreateFiles(string path, UpdateContents parent)
{
foreach (string file in Directory.EnumerateFiles(path))
{
UpdateContents files = new UpdateContents(file, false);
parent.children.Add(files);
}
parent.Initialize();
}
private void CreateFolders(string path, UpdateContents Parent)
{
foreach (string folder in Directory.EnumerateDirectories(path))
{
UpdateContents folders = new UpdateContents(folder, true);
CreateFiles(folder, folders);
CreateFolders(folder, folders);
Parent.children.Add(folders);
}
Parent.Initialize();
}
}
我有一个视图模型,但老实说它没有做任何事情。自从更改为 mvvm 后,我已经对其进行了编辑。下面是视图模型。
public class MainWindowVM
{
public string rootfile { get; set; }
public string version { get; set; }
public string date { get; set; }
public string _name { get; set; }
public string _path { get; set; }
public RelayCommand onBrowse { get; set; }
public MainWindowVM()
{
onBrowse = new RelayCommand(onBrowseCommand);
}
public void onBrowseCommand ( object commandInvoker )
{
Microsoft.Win32.OpenFileDialog win = new Microsoft.Win32.OpenFileDialog();
Nullable<bool> result = win.ShowDialog();
if (result == true)
{
string filename = win.FileName;
rootfile= filename;
rootfile = filename;
int index = rootfile.Length;
index = index - 4;
rootfile = rootfile.Remove(index);
//Get file version for text box
var fversion = FileVersionInfo.GetVersionInfo(filename);
version = fversion.FileVersion;
//get date created
DateTime fdate = File.GetCreationTime(filename);
date = fdate.ToString();
//Display Folder Contents
showzip(filename);
UpdateContents test = new UpdateContents(rootfile, true);
UpdateContents directory = test.CreateDirectory(rootfile);
}
}
在我的 XAML 代码中,我只有 TreeViewObject。下面是 xaml 的快照。我知道我需要将 Hierarchialdata 添加到 xaml 但是作为 mvvm 的新手,我不知道如何使用它。
<DockPanel LastChildFill="True" Grid.Row="4">
<TreeView DockPanel.Dock="Left" Margin="5,0,5,5" x:Name="foldersItem" ItemsSource="{Binding foldersItem}" >
</TreeView>
</DockPanel>
我只需要被发送到正确的方向,看起来我的模型正在构建正确的树结构,但我不知道如何用 mvvm 显示它!该代码现在只会解压缩文件夹。
【问题讨论】:
-
好文章mvvm。最重要的部分 -
INotifyPropertyChanged。另外,您的绑定现在是错误的。