2011-02-23 11 views
1

CaliburnとDevExpress NavBarControlの経験がありましたか? NavBarItemsのリストをビューモデルにバインドしようとしています。これは機能しません。私はそれがCaliburnのバインディングのためだと確信しています。CaliburnはDevExpress NavBarControlでうまく動かない

<dxnb:NavBarControl x:Name="NavigationBar"> 
    <dxnb:NavBarControl.Groups> 
     <dxnb:NavBarGroup x:Name="NavigationBarGroup" Content="{Binding PluginPresenter}" ImageSource="/Images/Icons/Group.png"> 
     </dxnb:NavBarGroup> 
    </dxnb:NavBarControl.Groups> 
    <dxnb:NavBarControl.View> 
     <dxnb:NavigationPaneView IsExpandButtonVisible="False"/> 
    </dxnb:NavBarControl.View> 
</dxnb:NavBarControl> 

public class ShellViewModel : PropertyChangeBase 
{ 
    public NavBarItemCollection Plugins { get; set; } 
    public NavBarGroup NavigationBarGroup { get; set; } 
} 
+0

あなたのVMとあなたのビューの関係がわかりません。 vmのプロパティは 'Plugins'ではなく 'PluginPresenter'になっていますか? また、一般的に、VM内に制御固有のコードを持つのは悪いパターンだと考えています。私はNavBarControlに慣れていませんが、最終結果は何ですか? –

+0

私はプラグインベースのシステム(ディレクトリ内のDLL)が必要です。 DLLの名前は、ユーザーが選択するためのリストに表示され、名前はDLL(プラグイン)をロードするために使用され、ビュー上でユーザーに表示されるフォーム –

答えて

0

私はちょうどCaliburn Microを見始めました。しかし、MVVMパターンでDevExpressナビゲーションバーを使用する方法についていくつかの研究を行いました。私は開発チームに例を尋ねました。彼らは、コントロールできないバグがあると言っていました。彼らは仕事の例を挙げました。リンクはこちらです: http://www.devexpress.com/Support/Center/p/Q347737.aspx

私はその解決法を見ましたが、使用するには複雑すぎました。うまくいけば、このパッチはすぐに利用可能になりそうです。

キース

UPDATE 私は、リンクが機能しなかったことを実現していませんでした。

  1. コントロールは、ナビゲーションバーのために作成されたユーザー:2つのターゲットタイプは2つのクラスが呼ばれ

    <UserControl x:Class="NavBarMVVM.View.MainView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:dxn="http://schemas.devexpress.com/winfx/2008/xaml/navbar" 
    xmlns:ext="clr-namespace:NavBarExtensions;assembly=NavBarExtensions" 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"> 
    <Grid> 
        <dxn:NavBarControl x:Name="navBar"> 
         <dxn:NavBarControl.View> 
          <dxn:NavigationPaneView/> 
         </dxn:NavBarControl.View> 
         <i:Interaction.Behaviors> 
          <ext:NavBarMVVMAttachedBehavior ItemsSource="{Binding}"> 
           <ext:NavBarMVVMAttachedBehavior.GroupStyle> 
            <Style TargetType="ext:NavBarGroupWrapper"> 
             <Setter Property="Header" Value="{Binding Caption}"/> 
             <Setter Property="ItemsSource" Value="{Binding ItemsViewModel}"/> 
            </Style> 
           </ext:NavBarMVVMAttachedBehavior.GroupStyle> 
           <ext:NavBarMVVMAttachedBehavior.ItemStyle> 
            <Style TargetType="ext:NavBarItemWrapper"> 
             <Setter Property="Content" Value="{Binding Name}"/> 
             <Setter Property="ImageSource" Value="{Binding PhotoImageSource}"/> 
             <Setter Property="Command" Value="{Binding ClickItemCommand}"/> 
            </Style> 
           </ext:NavBarMVVMAttachedBehavior.ItemStyle> 
          </ext:NavBarMVVMAttachedBehavior> 
         </i:Interaction.Behaviors> 
    
        </dxn:NavBarControl> 
    </Grid> 
    

*ここでソリューションのより詳細な説明がありますラッパー。バインディングは次のように行います。 BindingOperations.SetBinding(NavBarGroup、NavBarGroup.ContentProperty、new Binding( "Content"){Source = this});

この参照はNavBarGroupというクラスに注目してください。 4つのヘルパーグループがあります。 NavBarGroup、NavBarItems、NavBarGroups(NavBarGroupのリスト)、およびNavBarItems(NavBarItemのLI) これらのクラスは、データを静的メンバーとして保持する別の4つの等価クラスによって作成されます。それは私のための契約の遮断者だったこれらの最後のクラスです。それは過度に複雑に線を越えるように見える。 希望に役立ちます。 Keith

+0

リンクされた問題の解決は一般に閲覧可能ではありません。ここでコンテンツを引用できますか? – Alain

+1

MVVMナビゲーションバーへの修正が、devexpress.comからダウンロードできるようになりました。バージョン11.9 – KeithMacCrimmon

関連する問題