在TreeView中加载子类别,单击Dotvvm

时间:2017-07-31 14:28:46

标签: dotvvm

我使用business pack treeview组件进行菜单。我的目标是只检索没有子类别的顶级菜单。子类别仅显示用户图标单击(+ / - 图标)或菜单项单击。

所以基本上当我点击" a"或者绑定到此菜单对象的图标,我想向我的服务器发送请求以获取他的子类别等等。我不希望在一个请求中得到所有内容。

enter image description here

我注意到有两个点击处理程序。

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 个答案:

答案 0 :(得分:1)

不幸的是现在没有解决方案。我们在积压工作中有这个功能,并会在可能的情况下实施。

我们已在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)}" />

请注意,静态命令(coming)尚不支持DI。您需要自己创建所需的服务或从全球服务提供商处解决它们。