Hi
I have a hierarchical table that has 3 column : Id , TypeName , TypeParentId .
TypeParentId is allow nulls .
I want to create a ViewModel from Types table and Bind it to an SfTreeView .
How can I do That ?
namespace TreeViewXamarin
{
public class FileManagerViewModel
{
public DataTable DataTable;
public FileManagerViewModel()
{
DataTable = GetDataTable();
}
private DataTable GetDataTable()
{
DataTable dataTable = new DataTable("Types");
dataTable.Columns.Add("Id", typeof(Int32));
dataTable.Columns.Add("TypeName", typeof(string));
dataTable.Columns.Add("TypeParentId", typeof(Int32));
dataTable.Rows.Add(1001, "Australia", 1);
dataTable.Rows.Add(1002, "Brazil", 2);
dataTable.Rows.Add(1003, "India", 3);
dataTable.Rows.Add(1004, "Victoria", 5);
dataTable.Rows.Add(1005, "Rio", 6);
dataTable.Rows.Add(1006, "TamilNadu", 8);
dataTable.Rows.Add(1007, "Chennai", 3);
return dataTable;
}
}
} |
namespace TreeViewXamarin
{
public class FileManagerViewModel
{
private ObservableCollection<FileManager> imageNodeInfo;
public ObservableCollection<FileManager> ImageNodeInfo
{
get { return imageNodeInfo; }
set { this.imageNodeInfo = value; }
}
}
} |
public class FileManagerViewModel
{
public FileManagerViewModel()
{
DataTable = GetDataTable();
GenerateSource();
}
private void GenerateSource()
{
ImageNodeInfo = new ObservableCollection<FileManager>();
ImageNodeInfo.Add(new FileManager() { ID = (int)DataTable.Rows[0].ItemArray[0], ItemName = (string)DataTable.Rows[0].ItemArray[1], TypeParentId = (int)DataTable.Rows[0].ItemArray[2] });
ImageNodeInfo.Add(new FileManager() { ID = (int)DataTable.Rows[1].ItemArray[0], ItemName = (string)DataTable.Rows[1].ItemArray[1], TypeParentId = (int)DataTable.Rows[1].ItemArray[2] });
ImageNodeInfo.Add(new FileManager() { ID = (int)DataTable.Rows[2].ItemArray[0], ItemName = (string)DataTable.Rows[2].ItemArray[1], TypeParentId = (int)DataTable.Rows[2].ItemArray[2] });
ImageNodeInfo[0].SubFiles = new ObservableCollection<FileManager>()
{
new FileManager()
{
ID = (int)DataTable.Rows[3].ItemArray[0],
ItemName = (string)DataTable.Rows[3].ItemArray[1],
TypeParentId = (int)DataTable.Rows[3].ItemArray[2]
}
};
ImageNodeInfo[1].SubFiles = new ObservableCollection<FileManager>()
{
new FileManager()
{
ID = (int)DataTable.Rows[4].ItemArray[0],
ItemName = (string)DataTable.Rows[4].ItemArray[1],
TypeParentId = (int)DataTable.Rows[4].ItemArray[2]
}
};
ImageNodeInfo[2].SubFiles = new ObservableCollection<FileManager>()
{
new FileManager()
{
ID = (int)DataTable.Rows[5].ItemArray[0],
ItemName = (string)DataTable.Rows[5].ItemArray[1],
TypeParentId = (int)DataTable.Rows[5].ItemArray[2]
}
};
ImageNodeInfo[2].SubFiles[0].SubFiles = new ObservableCollection<FileManager>()
{
new FileManager()
{
ID = (int)DataTable.Rows[6].ItemArray[0],
ItemName = (string)DataTable.Rows[6].ItemArray[1],
TypeParentId = (int)DataTable.Rows[6].ItemArray[2]
}
};
}
} |
<syncfusion:SfTreeView x:Name="treeView" ChildPropertyName="SubFiles" ItemsSource="{Binding ImageNodeInfo}">
<syncfusion:SfTreeView.ItemTemplate>
<DataTemplate>
<Grid x:Name="grid" RowSpacing="0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Text="{Binding ID}" LineBreakMode="NoWrap" VerticalTextAlignment="Center"/>
<Label Text="{Binding ItemName}" Grid.Column="1" LineBreakMode="NoWrap" VerticalTextAlignment="Center"/>
</Grid>
</DataTemplate>
</syncfusion:SfTreeView.ItemTemplate>
</syncfusion:SfTreeView> |
public ObservableCollection<FileManager> GetItemsAsync()
{
ImageNodeInfo = new ObservableCollection<FileManager>();
var items = database.Table<DataBase>().ToList();
int j = 3;
for (int i = 0; i<3; i++)
{
var node = new FileManager(items[i].ID, items[i].Name);
node.SubFiles = new ObservableCollection<FileManager>() { new FileManager(items[j].ID, items[j].Name) };
ImageNodeInfo.Add(node);
j++;
}
return ImageNodeInfo;
} |
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var nodes = App.Database.GetItemsAsync();
treeView.ItemsSource = nodes;
}
} |