2016-10-03 7 views
0

Command "CommandZoomIn"의 경우 ListBox ItemTemplate에 정의 된 컨트롤에 대해 CanExecute 및 Execute가 발생하지 않습니다. GraphLcView UserControl이 AnalysisView의 자식으로 직접 정의 될 때 GraphLcView 메서드 "CanExecute"와 "Execute"가 모두 호출되지만 ListBox ItemTemplate의 Item DataTemplate으로 추가 될 때 두 메서드가 호출되지 않습니다.CommandTemplate의 DataTemplate으로 명령 바인딩이 전파되지 않습니다.

  • 명령이있는 단추는 최상위 창에서 리본으로 정의됩니다.
  • 단순화 된 계층 구조 :
    • (작업) 최상위 창 -> AnalysisView -> GraphLcView
    • (작동하지 않음) 최상위 창 -> AnalysisView ->리스트 박스 + ItemTemplate을 -> GraphLcView
  • CommandBinding은 GraphLcView 하위 컨트롤 (UserControl.CommandBinding)에 정의되어 있습니다.
  • CommandBindind에 포함 된 MVVM이 없습니다.

업데이트 : 문제를 데모하기 위해 작업 샘플을 만들었지 만 여기서 설명한 것과 다른 동작을 보입니다. 그러나 완전히 작동하는 샘플은 아마도 내가 여기있는 것과 비슷한 것을 보여 주어야합니다. bahvior가 다르므로 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"/> 

UserControl을 AnalysisView 부분 코드 (이전 GraphLcView UserControl에 사용되는 경우) :

   <!-- ********************************--> 
       <!-- ********************************--> 
       <!-- 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

좋아, 몇 시간이 걸릴 거예요하지만 난 전체 작동 간단한 샘플을 만들려고합니다. –

+0

전체 샘플이 도움이 될 것입니다 .. –

답변

0

죄송합니다. 조사가 끝나면, 문제가 포커스를 유지하지 않는 LightningChart 컨트롤에서 발생한다는 것을 알게되었습니다. "GotFocus"및 "LostFocus"에 2 개의 핸들러를 추가했습니다. 그런 다음 ListBox itemTemplate의 일부가 아닌 첫 번째 탭의 모든 컨트롤이 제대로 작동한다는 것을 알았습니다. 그러나 두 번째 탭에있는 ListBox itemTemplate에있는 다른 모든 것들은 특별한 이유없이 (필자가 이해할 수있는 최소한은 아님) 포커스를 잃는 즉시 포커스를 잃었습니다.

LightningChart의 Arction에 문제를 보내면 곧 해결할 것이라고 말했습니다.