2011-08-29 2 views
0

에 제어를 찾을 수 없습니다 나는이 ListView를 가지고 : 나는 새 창에서 <CheckBox x:Name="checkedPosition" />ListView를

내 ListView에 부하를 액세스 할 필요가

<ListView Grid.Row="1" x:Name="ListLinePositions" ItemsSource="{Binding Source={StaticResource CollectionViewSource}}" SelectionChanged="ListLinePositions_SelectionChanged"> 
     <ListView.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Margin" Value="0,0,0,5"/> 
          <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}" x:Name="posTemplate"> 
            <Grid Name="GridGroupItem"> 
             <Border Name="BorderGroupItem" CornerRadius="3" 
             BorderThickness="1" Padding="1,1,1,1" 
             Focusable="True" FocusVisualStyle="{x:Null}" 
             Background="{StaticResource {x:Static SystemColors.GradientInactiveCaptionBrushKey}}" 
             BorderBrush="{StaticResource {x:Static SystemColors.InactiveBorderBrushKey}}" PreviewMouseDown="BorderGroupItem_PreviewMouseDown"> 
              <Grid> 
               <Grid.RowDefinitions> 
                <RowDefinition/> 
                <RowDefinition/> 
               </Grid.RowDefinitions> 
               <Grid Name="GridHeader" Grid.Row="0" Margin="0,2,0,2"> 
                <Grid.ColumnDefinitions> 
                 <ColumnDefinition/> 
                 <ColumnDefinition Width="100"/> 
                </Grid.ColumnDefinitions> 
                <StackPanel Orientation="Horizontal" Grid.Column="0" Height="24"> 
                 <CheckBox x:Name="checkedHeader" VerticalAlignment="Center"/> 
                 <TextBlock Text="{Binding Name.Id, Mode=OneWay}" FontWeight="Bold" Margin="3,0,3,0" VerticalAlignment="Center" /> 
                 <Image Height="24" Width="24" Source ="{Binding Name.Partition.Sport.TypeEnum, Converter={StaticResource SportTypeToImageConverter}, Mode=OneWay}" VerticalAlignment="Center" /> 
                </StackPanel> 
               </Grid> 
              </Grid> 
             </Border> 
            </Grid>           
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
     </ListView.GroupStyle>   

     <ListView.View> 
      <GridView x:Name="positionGrid"> 
       <GridViewColumn Width="Auto" Header="check"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <CheckBox x:Name="checkedPosition" /> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

합니다. 그래서이 CheckBox에 액세스하려고하면

foreach (LinePosition item in this.ListLinePositions.Items) 
{ 
     CheckBox cb = FindByName("checkedPosition", 
           (ListViewItem)this.ListLinePositions.ItemContainerGenerator.ContainerFromItem(item)) as CheckBox;  
} 

ListLinePositions.Items.Count > 0이지만 아무 것도 찾을 수 없습니다. 하지만 내 창에 대한 ShowDialog 이후에 나는 체크 된 위치를 얻고이 코드는 작동합니다! 첫 번째 경우에는 무엇을해야할지 모르겠습니다. 해결책을 찾으십시오.

는 그

public LineHeaderViewDocument() 
     { 
      InitializeComponent(); 
      Title = GetTitle(_lineFilter);//изм 
      ListLinePositions.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged; 
     } 

void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) 
     { 
      if (ListLinePositions.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated) 
      { 
       //... 
        foreach (LinePosition item in this.ListLinePositions.Items) 
        { 
          CheckBox cb = FindByName("checkedPosition", 
                (ListViewItem)this.ListLinePositions.ItemContainerGenerator.ContainerFromItem(item)) as CheckBox;  
        } 
      } 
     } 

같은 것을했다하지만이 역시 작동하지 않습니다.

+0

문제 해결 ... 근본 원인 분석을위한 장소가되어서는 안됩니다 ... 작동하는 것과 관련된 문제가 있습니까? – Arpit

답변

0

나는 이것을 발견하고 그것을 작동 :

//.. 
CheckBox cb = FindByName("checkedPosition", 
(ListViewItem)this.ListLinePositions.ItemContainerGenerator.ContainerFromItem(item)) as CheckBox; 

    if (cb == null) 
    { 
     this.ListLinePositions.ScrollIntoView(item); 
     WaitFor(TimeSpan.Zero, DispatcherPriority.SystemIdle); 

     cb = FindByName("checkedPosition", 
         (ListViewItem)this.ListLinePositions.ItemContainerGenerator.ContainerFromItem(item)) as CheckBox; 

    } 

public static void WaitFor(TimeSpan time, DispatcherPriority priority) 
     { 
      DispatcherTimer timer = new DispatcherTimer(priority); 
      timer.Tick += new EventHandler(OnDispatched); 
      timer.Interval = time; 
      DispatcherFrame dispatcherFrame = new DispatcherFrame(false); 
      timer.Tag = dispatcherFrame; 
      timer.Start(); 
      Dispatcher.PushFrame(dispatcherFrame); 
     } 

     public static void OnDispatched(object sender, EventArgs args) 
     { 
      DispatcherTimer timer = (DispatcherTimer)sender; 
      timer.Tick -= new EventHandler(OnDispatched); 
      timer.Stop(); 
      DispatcherFrame frame = (DispatcherFrame)timer.Tag; 
      frame.Continue = false; 
     } 

작동 않는 이유를 설명 할 수 있습니까?

관련 문제