2016-10-03 5 views
0

Command "CommandZoomIn"の場合、ListBox ItemTemplateに定義されたコントロールに対してCanExecuteとExecuteは発生しません。 GraphLcView UserControlがAnalysisViewの子として直接定義されている場合、 "CanExecute"と "Execute"の両方が呼び出されますが、両方のメソッドがListBox ItemTemplateのItem DataTemplateとして追加されても呼び出されません。コマンドバインディングがコントロールのためにItemTemplateのDataTemplateに伝播しない

  • コマンドのボタンは、トップレベルウィンドウでリボンに定義されています。
  • 簡体階層:
    • (ワーキング)トップレベルウィンドウ - > AnalysisView - > GraphLcView
    • (動作しない)トップレベルウィンドウ - > AnalysisView - > ListBoxコントロール+ ItemTemplateに - > GraphLcView
  • CommandBindingは、GraphLcViewの子コントロール(UserControl.CommandBinding)に定義されています。
  • CommandBindindに含めるMVVMはありません。

更新:問題をデモするためのサンプルを作成しましたが、ここで説明したものとは異なる動作がありました。しかし、完全に動作するサンプルは、私がここにあるものに似た何かを示すはずです。バービー人が違うので、私はanother question at StackOverflowと尋ねました。 Code is available here at GitHub

ユーザーコントロール 'GraphLcView' 部分コード:

<UserControl x:Class="GraphCtrl.GraphView.GraphLcView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

...

<Grid.CommandBindings> 
    <CommandBinding Command="{x:Static graphCtrlCommand:CtrlAnalysisCommand.CommandZoomToFitsAll}" CanExecute="CanZoomToFitsAll" Executed="ZoomToFitsAll"/> 
    <CommandBinding Command="{x:Static graphCtrlCommand:CtrlAnalysisCommand.CommandZoomIn}" CanExecute="CanZoomIn" Executed="ZoomIn"/> 
    <CommandBinding Command="{x:Static graphCtrlCommand:CtrlAnalysisCommand.CommandZoomOut}" CanExecute="CanZoomOut" Executed="ZoomOut"/> 
(前GraphLcViewユーザーコントロールが使用されている)

ユーザーコントロールAnalysisView部分コード:

   <!-- ********************************--> 
       <!-- ********************************--> 
       <!-- CommmandBinding works fine here --> 
       <!-- ********************************--> 
       <!-- ********************************--> 
       <graphView1:GraphLcView Grid.Row="1" x:Name="GraphView" Graph="{Binding Graph}" 
             Visibility="{Binding IsMain, Converter={StaticResource BooleanToVisibilityConverter1}}" 
             TrackedSignal="{Binding DataContext.LastTrackedSignal, Mode=TwoWay, ElementName=MyControl}" 
             SourceTrackedSignal ="{Binding Model.EventTrackingSourceGraphToLegend, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ElementName=MyControl}" 
             IsMouseInteractive="{Binding IsMouseInteractive}" 
             UseFastTooltip="{Binding UseFastTooltip}" 
             ActiveObjectChanged="OnChildActiveObjectChanged" 
             > 
       </graphView1:GraphLcView> 

       <Grid Name="GridDetails" Grid.Row="1" > 
        <ListBox Name="ListBoxDetails" ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
         ItemsSource="{Binding Graph.AdditionalViews}" 
         Visibility="{Binding IsDetails, Converter={StaticResource BooleanToVisibilityConverter1}}" 
         HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
         <ListBox.ItemsPanel> 
          <ItemsPanelTemplate> 
           <WrapPanel IsItemsHost="True" 
             Name="DetailsWrapPanel"/> 
          </ItemsPanelTemplate> 
         </ListBox.ItemsPanel> 

         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <Border BorderBrush="Black" BorderThickness="1" Margin="0,1,0,1" 
             Width="{Binding DataContext.DetailsWorkspaceDimensionX, ElementName=MyControl, Mode=OneWay}" 
             Height="{Binding DataContext.DetailsWorkspaceDimensionY, ElementName=MyControl, Mode=OneWay}" 
             > 
            <Grid> 
             <Grid.RowDefinitions> 
              <RowDefinition Height="Auto"></RowDefinition> 
              <RowDefinition></RowDefinition> 
              <RowDefinition Height="Auto"></RowDefinition> 
             </Grid.RowDefinitions> 

             <TextBlock Grid.Row="0" Text="{Binding Name}"></TextBlock> 

             <!-- ********************************--> 
             <!-- ********************************--> 
             <!-- Binding does not work fine here --> 
             <!-- ********************************--> 
             <!-- ********************************--> 

             <!--ActiveObjectChanged="GraphLcViewDetailOnActiveObjectChanged"--> 
             <!--SourceTrackedSignal="{Binding DataContext.EventTypeSourceForSignalTrackingToGraph, Mode=TwoWay, ElementName=MyControl}"--> 
             <graphView1:GraphLcView Grid.Row="1" 
              AdditionalView="{Binding Path=., Mode=OneWay}" 
              Graph="{Binding Graph, ElementName=GraphView}" 
              TrackedSignal="{Binding DataContext.LastTrackedSignal, Mode=TwoWay, ElementName=MyControl}" 
              SourceTrackedSignal ="{Binding Model.EventTrackingSourceGraphToLegend, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ElementName=MyControl}" 
              IsMouseInteractive="{Binding IsMouseInteractive}" 
              UseFastTooltip="{Binding UseFastTooltip}" 
              ActiveObjectChanged="OnChildActiveObjectChanged" 
              > 
             </graphView1:GraphLcView> 
            </Grid> 
           </Border> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
        </ListBox> 
       </Grid> 
+0

graphviewとコマンドについて詳しく説明できますか?可能であれば、コードを追加してください。 –

+0

OK、それは数時間かかるはずですが、私は完全に動作する簡単なサンプルを作成しようとします。 –

+0

完全なサンプルは役に立ちます.. –

答えて

0

すみません。調査の結果、問題がフォーカスを保持していないLightningChartコントロールから発生していることがわかりました。私は "GotFocus"と "LostFocus"に2つのハンドラを追加しました。それから、リストボックスのitemTemplateの一部ではない最初のタブのすべてのコントロールがうまくいくことに気付きました。しかし、2番目のタブのListBox itemTemplateにある他のすべての要素は、特別な理由がなくてもすぐにフォーカスを失います(少なくとも私が理解できるものはありません)。

私はこの問題をLightningChartの下のArctionに送って、すぐに問題を解決しようとしていると言いました。

関連する問題