单击 Dotvvm 在 TreeView 中加载子类别
Loading subcategories in TreeView on click Dotvvm
我使用 business pack treeview 组件作为菜单。我的目标是只检索没有子类别的顶级菜单。子类别将仅在用户图标单击(+/- 图标)或菜单项单击时显示。
所以基本上当我点击 "a" 或绑定到这个菜单对象的图标时,我想向我的服务器发送请求以获取他的子类别等等。我不想在一个请求中获得所有内容。
我注意到视图中有两个点击处理程序。
1) 使用 Changed
属性 - 当我使用这个 属性 来处理点击事件时,我成功地将正确的对象放入我的 CategorySelectedList
,但它只注册直接点击文本标签。对于图标,它不再起作用,类别菜单也不会展开。
2) 使用Events.Click
属性——当我使用这个属性来处理点击事件。我什至没有将正确的对象放入 CategorySelectedList
属性,但在这种情况下类别菜单会展开。
我无法将我的视图中的对象 ID 发送到 SetActiveMenuNode
方法中,所以我必须直接从我的 CategorySelectedList
中获取它,但每个方法都有自己的问题。
有解决办法吗?
模型视图
public List<CategoryListDTO> AdminMenuList { get; set; } = new List<CategoryListDTO>();
public List<CategoryListDTO> AdminMenuSelectedList { get; set; } = new List<CategoryListDTO>();
public void SetActiveMenuNode()
{
var selected = AdminMenuSelectedList.FirstOrDefault();
}
//načítání podkategorií
public StaticCommandBindingExpression LoadChildren { get; set; } = new StaticCommandBindingExpression(new CompiledBindingExpression( //something here));
我的观点
<dot:Content ContentPlaceHolderID="MainContent">
<section class="content">
<bp:TreeView DataSource="{value: AdminMenuList}"
SelectedValues="{value: AdminMenuSelectedList}"
ItemKeyBinding="{value: Id}"
ItemHasChildrenBinding="{value: HasCategories}"
ItemChildrenBinding="{value: AssignedToCategory}"
LoadChildren="{staticCommand: _parent.MyMethod()}"
Changed="{command: SetActiveMenuNode()}"
>
<p>{{value: Name}}</p>
</bp:TreeView>
</section>
很遗憾,目前没有解决方案。我们的积压工作中有此功能,并会在可能的情况下实施。
我们已在 1.1.5-rc1 版本中实现了此功能。 TreeView
控件有一个新的 属性 LoadChildren
类型 StaticCommandBindingExpression
。这是一个关于如何使用它的例子。
ViewModel.cs
[AllowStaticCommand]
public static IEnumerable<Item> LoadChildren(Item parent)
{
return LoadYourChildrenFromSomewhere(parent.Id);
}
View.dothtml
<bp:TreeView LoadChildren="{staticCommand: ViewModel.LoadChildren(_this)}" />
请注意静态命令尚不支持 DI(coming)。您需要自己创建所需的服务或从全球服务提供商处解决它们。
我使用 business pack treeview 组件作为菜单。我的目标是只检索没有子类别的顶级菜单。子类别将仅在用户图标单击(+/- 图标)或菜单项单击时显示。
所以基本上当我点击 "a" 或绑定到这个菜单对象的图标时,我想向我的服务器发送请求以获取他的子类别等等。我不想在一个请求中获得所有内容。
我注意到视图中有两个点击处理程序。
1) 使用 Changed
属性 - 当我使用这个 属性 来处理点击事件时,我成功地将正确的对象放入我的 CategorySelectedList
,但它只注册直接点击文本标签。对于图标,它不再起作用,类别菜单也不会展开。
2) 使用Events.Click
属性——当我使用这个属性来处理点击事件。我什至没有将正确的对象放入 CategorySelectedList
属性,但在这种情况下类别菜单会展开。
我无法将我的视图中的对象 ID 发送到 SetActiveMenuNode
方法中,所以我必须直接从我的 CategorySelectedList
中获取它,但每个方法都有自己的问题。
有解决办法吗?
模型视图
public List<CategoryListDTO> AdminMenuList { get; set; } = new List<CategoryListDTO>();
public List<CategoryListDTO> AdminMenuSelectedList { get; set; } = new List<CategoryListDTO>();
public void SetActiveMenuNode()
{
var selected = AdminMenuSelectedList.FirstOrDefault();
}
//načítání podkategorií
public StaticCommandBindingExpression LoadChildren { get; set; } = new StaticCommandBindingExpression(new CompiledBindingExpression( //something here));
我的观点
<dot:Content ContentPlaceHolderID="MainContent">
<section class="content">
<bp:TreeView DataSource="{value: AdminMenuList}"
SelectedValues="{value: AdminMenuSelectedList}"
ItemKeyBinding="{value: Id}"
ItemHasChildrenBinding="{value: HasCategories}"
ItemChildrenBinding="{value: AssignedToCategory}"
LoadChildren="{staticCommand: _parent.MyMethod()}"
Changed="{command: SetActiveMenuNode()}"
>
<p>{{value: Name}}</p>
</bp:TreeView>
</section>
很遗憾,目前没有解决方案。我们的积压工作中有此功能,并会在可能的情况下实施。
我们已在 1.1.5-rc1 版本中实现了此功能。 TreeView
控件有一个新的 属性 LoadChildren
类型 StaticCommandBindingExpression
。这是一个关于如何使用它的例子。
ViewModel.cs
[AllowStaticCommand]
public static IEnumerable<Item> LoadChildren(Item parent)
{
return LoadYourChildrenFromSomewhere(parent.Id);
}
View.dothtml
<bp:TreeView LoadChildren="{staticCommand: ViewModel.LoadChildren(_this)}" />
请注意静态命令尚不支持 DI(coming)。您需要自己创建所需的服务或从全球服务提供商处解决它们。