单击 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)。您需要自己创建所需的服务或从全球服务提供商处解决它们。