2017-07-31 2 views
0

私はビジネス用のツリービューコンポーネントをメニューに使用しています。私の目標は、サブカテゴリのないトップレベルのメニューだけを取り出すことです。サブカテゴリは、ユーザーアイコンのクリック(+/- アイコン)またはメニュー項目のクリックでのみ表示されます。クリックしてTreeViewにサブカテゴリをロードするDotvvm

基本的にこのメニューオブジェクトにバインドされた「a」やアイコンをクリックすると、自分のサブカテゴリを取得するなどのリクエストをサーバーに送信したいと考えています。私は1つの要求ですべてを取得したくない。

enter image description here

私は2件のクリックハンドラがビューにある気づいたよう。

1)Changedプロパティを使用します。このプロパティを使用してクリックイベントを処理すると、正しいオブジェクトが私のCategorySelectedListに正常に取得されますが、テキストラベルに直接クリックが登録されます。アイコンのためにもう働かないし、カテゴリメニューも展開されません。

2)Events.Clickプロパティを使用します。このプロパティを使用してクリックイベントを処理すると、私はCategorySelectedListプロパティに正しいオブジェクトを取得することもありませんが、この場合はカテゴリメニューが展開されます。

オブジェクトIDを私の視点からSetActiveMenuNodeメソッドに送信することはできませんので、私はCategorySelectedListから直接取得する必要がありますが、各aproachにはそれぞれ独自の問題があります。

解決方法はありますか?

のModelView

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.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がまだstaticコマンドではサポートされていないことに注意してください。必要なサービスを自分で作成するか、グローバルサービスプロバイダから解決する必要があります。

+0

申し訳ありませんが、お返事ありがとうございます。 – Martin

+0

私はあなたに良い知らせがあります。この機能は、次期ベータ版で利用可能になります。 –

+0

ありがとうございます。次のベータ版をリリースする必要がありますか? – Martin

関連する問題