////// Model
public class Task
{
public int id;
public string name;
public ObservableCollection
childrens;
}
////// ViewModel
pubilc class TaskViewModel
{
// Define dictionary for storing expanded state
// int: id of item of RadTreeListView
// bool: expanded state, true(expanded) false(folded)
private Dictionary _Expanded;
// Define Get/Set method
public void SetExpanded(int id, bool expanded)
{
if (_Expanded.ContainsKey(id))
{
_Expanded[id] = expanded;
}
else
{
_Expanded.Add(id, expanded);
}
}
public bool GetExpanded(int id)
{
if (_Expanded.ContainsKey(id))
{
return _Expanded[id];
}
return false;
}
}
////// View
// store expanded state when it is changing
private void radTreeListView_RowIsExpandedChanging(object sender, Telerik.Windows.Controls.GridView.RowEventArgs e)
{
TaskViewModel viewModel = this.DataContext as TaskViewModel;
Task task = e.Row.DataContext as Task;
TreeListViewRow row = (TreeListViewRow)TemplateGrid.ItemContainerGenerator.ContainerFromItem(e.Row.Item);
if (row != null && task != null)
viewModel.SetExpanded(task.id, row.IsExpanded);
}
// Set expanded state in DataLoaded event
private void radTreeListView_DataLoaded(object sender, EventArgs e)
{
var source = radTreeListView.ItemsSource as ObservableCollection;
SetExpanded(source)
}
// Recursive method for self-hierarchy collection
private void SetExpanded(ObservableCollection tasks)
{
if (tasks == null)
return;
TaskViewModel viewModel = this.DataContext as TaskViewModel;
foreach (Task task in tasks)
{
if (task.children == null || task.children.Count == 0)
return;
SetExpanded(task.children);
if (viewModel != null)
{
if (viewModel.GetExpanded(task.id))
radTreeListView.ExpandHierarchyItem(task);
else
radTreeListView.CollapseHierarchyItem(task);
}
}
}
댓글 없음:
댓글 쓰기