2009-03-22 21 views
1

Im複合アプライドガイドパターンを使用してWPFアプリケーションを構築する。私のシェルでは、私は領域にビューを動的にロードするための領域を含むタブコントロールがあります。ビューはTabControlの新しいタブに読み込まれます。Tabcontrolデータ型のButtonへのCloseコマンドのバインドに関する問題

<TabControl  
     AutomationProperties.AutomationId="MainTabControl" 
     cal:RegionManager.RegionName="{x:Static inf:RegionNames.MainRegion}" 
     Width="Auto" Height="Auto" Margin="10,10,0,0" 
     HorizontalAlignment="Stretch"        
     IsSynchronizedWithCurrentItem="True" 
     ItemTemplate="{StaticResource TabItemTemplate}" 
SelectionChanged="TabControl_SelectionChanged"> 

私は、CloseButtonを実装するためのDataTemplate "TabItemTemplate"を持っています。私は、DataTemplateのbutton'sコマンドをpresentationModelのCloseコマンドにバインドする方法を理解できません。コマンドをCompositCommandにバインドすると、コマンドはexecutetになります。しかし、私は、閉じるボタンが押されたタブを見つけ出し、そのPresentationModelでcloseCommandを実行するだけです。以下はdataTemplateです。

<DataTemplate x:Key="ClosableTabItemTemplate"> 
      <DockPanel Width="120"> 
       <Button 
        Command="inf:CloseCommands.CloseCommand" 
        Content="X" 
        Cursor="Hand" 
        DockPanel.Dock="Right" 
        Focusable="False" 
        FontFamily="Courier" 
        FontSize="9" 
        FontWeight="Bold" 
        Margin="0,1,0,0" 
        Padding="0" 
        VerticalContentAlignment="Bottom" 
        Width="16" Height="16" 
        /> 
       <ContentPresenter 
     Content="{Binding}" 
     VerticalAlignment="Center" 
     /> 
      </DockPanel> 
     </DataTemplate> 

誰もこのバインディングの問題を解決する方法を知っていますか?

答えて

0

私はこの問題の解決策を見つけました。問題は、私がTabControlにUserControlをバインドするとき、それはusercontrolに設定されたcontentpaneのdatacontextだけで、headerpaneのdatacontextはまだnullです。しかし、アイテム用とデータ用の2つのデータテンプレートを定義してから、リージョンにpresentationModelを追加すると、アイテムとコンテンツの両方のdataContextが設定されます。次に、itemTemplateでpresentationModelのdelegateCommandプロパティにバインドできます。

0

プロパティで公開されているDelegateCommandなどのビューモデルのコマンドインスタンスにバインドするか、CommandParameterをTabItemのDataContextにバインドして、共有コマンドにアイテムを渡す必要があります。

+0

私はすでにDelegateCommandにバインドしようとしましたが、うまくいかないようです。 DataTemplateがTabItemのDataContextを知らないようです。 – KaJo

+0

ビューをリージョンにどのように追加しますか? (あなたのコードはどのように見えますか?) –

1

私はPrismを学んでいる間に同じ問題を抱えていましたが、要素結合を使って同じ問題が発生しました。スクービーは私のシェルウィンドウとたCloseCommandの名前です

<Button Content="x" Command="{Binding ElementName=Scooby, Path=Content.DataContext.CloseCommand}" /> 

は、シェルのViewModelにプリズムDelegateCommandです。

これは、ソリューションに代わる方法を示すため、ここに追加する必要があると思いました。

関連する問題