namespace TreeViewXamarin
{
public class Behavior : Behavior<SfTreeView>
{
SfTreeView treeView;
FileManagerViewModel viewModel;
protected override void OnAttachedTo(SfTreeView bindable)
{
treeView = bindable;
treeView.ItemTapped += Bindable_ItemTapped;
treeView.Loaded += TreeView_Loaded;
base.OnAttachedTo(bindable);
}
private void TreeView_Loaded(object sender, TreeViewLoadedEventArgs e)
{
treeView.ExpandAll();
}
private void Bindable_ItemTapped(object sender, Syncfusion.XForms.TreeView.ItemTappedEventArgs e)
{
if (e.Node.HasChildNodes)
return;
viewModel = treeView.BindingContext as FileManagerViewModel;
viewModel.Id = (e.Node.Content as FileManager).Id;
App.Current.MainPage.Navigation.PushAsync(new NewPage());
}
protected override void OnDetachingFrom(SfTreeView bindable)
{
treeView.ItemTapped -= Bindable_ItemTapped;
treeView.Loaded -= TreeView_Loaded;
treeView = null;
base.OnDetachingFrom(bindable);
}
}
} |
namespace TreeViewXamarin
{
public class FileManagerViewModel : INotifyPropertyChanged
{
private int _id;
public FileManagerViewModel()
{
}
public int Id
{
get => _id;
set
{
_id = value;
OnPropertyChanged("Id");
}
}
...
private void OnPropertyChanged(string property)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
}
} |
namespace TreeViewXamarin
{
public partial class MainPage : ContentPage
{
FileManager item;
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
var bindingContext = this.BindingContext as FileManagerViewModel;
treeView.ExpandAll();
foreach (var node in bindingContext.ImageNodeInfo)
GetChildNode(node, bindingContext.Id);
treeView.BringIntoView(item, true);
base.OnAppearing();
}
private void GetChildNode(FileManager node, int idx)
{
if (node.SubFiles.Count <= 0) return;
foreach (var child in node.SubFiles)
{
if (child.Id == idx)
{
item = child;
}
if (child.SubFiles != null)
{
this.GetChildNode(child, idx);
}
}
}
}
} |
namespace TreeViewXamarin
{
public class Behavior : Behavior<SfTreeView>
{
SfTreeView treeView;
FileManagerViewModel viewModel;
protected override void OnAttachedTo(SfTreeView bindable)
{
treeView = bindable;
treeView.ItemTapped += Bindable_ItemTapped;
treeView.Loaded += TreeView_Loaded;
base.OnAttachedTo(bindable);
}
private void TreeView_Loaded(object sender, TreeViewLoadedEventArgs e)
{
treeView.ExpandAll();
}
private void Bindable_ItemTapped(object sender, Syncfusion.XForms.TreeView.ItemTappedEventArgs e)
{
if (e.Node.HasChildNodes)
return;
viewModel = treeView.BindingContext as FileManagerViewModel;
viewModel.SelectedNode = e.Node.Content as FileManager;
App.Current.MainPage.Navigation.PushAsync(new NewPage());
}
protected override void OnDetachingFrom(SfTreeView bindable)
{
treeView.ItemTapped -= Bindable_ItemTapped;
treeView.Loaded -= TreeView_Loaded;
treeView = null;
base.OnDetachingFrom(bindable);
}
}
} |
namespace TreeViewXamarin
{
public class FileManagerViewModel : INotifyPropertyChanged
{
private FileManager _selectedNode;
public FileManagerViewModel()
{
}
public FileManager SelectedNode
{
get => _selectedNode;
set
{
_selectedNode = value;
OnPropertyChanged("SelectedNode");
}
}
...
private void OnPropertyChanged(string property)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
}
} |
namespace TreeViewXamarin
{
public partial class MainPage : ContentPage
{
FileManager item;
public MainPage()
{
InitializeComponent();
}
protected override void OnAppearing()
{
treeView.ExpandAll();
if ((this.BindingContext as FileManagerViewModel).SelectedNode != null)
{
treeView.SelectedItem = (this.BindingContext as FileManagerViewModel).SelectedNode;
}
treeView.BringIntoView((this.BindingContext as FileManagerViewModel).SelectedNode, true);
base.OnAppearing();
}
}
} |