簡體   English   中英

如何訪問ListBox itemsSource里面的TextBox是Datatemplate?

[英]how to access TextBox inside ListBox itemsSource which is Datatemplate?

我有一個ListBox ,它的ItemsSourceComboBox SelectedItem鏈接。 其模板與DataTemplate關聯。 一切都很好,但是如何訪問ListBoxItems每個TextBox 我在每個ListItem有5個標簽和2個TextBoxes 我想訪問ListBoxItem每個TextBox和標簽。 我需要一些想法如何訪問每個項目內的每個TextBox 例如,第一個ListBoxItem有“ wbprofileDesc” TextBox 因此,我需要訪問此TextBox並為其編寫一些功能,例如keypress事件。 它需要為所有ListBoxItems每個TextBox單獨工作。 假設有5個ListBoxItems 我還需要獲取其他控件,如wbselect( ComboBox ),wbdepth,wbwidthvalue等。為此,我正在使用MVVM模型。

<Window.Resources>
  <local:wbItemViewModel x:Key="wbItem"/>

  <DataTemplate x:Key="wbObjectsDataTemplate">
    <Grid Grid.ColumnSpan="1" Grid.RowSpan="1" Height="Auto" Width="642" Margin="0,0,0,-14">
      <Grid HorizontalAlignment="Left" VerticalAlignment="Top" Width="697"  Margin="10,0,0,0" Height="54" >
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="49*"/>
          <ColumnDefinition Width="91*"/>
          <ColumnDefinition Width="309*"/>
          <ColumnDefinition Width="306*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition Height="auto" />
          <RowDefinition/>
          <RowDefinition Height="auto" MinHeight="5"/>
        </Grid.RowDefinitions>

        <Label Content="{Binding WBName_lbl}" Margin="0,3,0,5" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2"/> 

        <ComboBox x:Name="wbselect" Margin="5,0,10,1" Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="0">
          <ComboBoxItem x:Name="wbstraight" IsSelected="True" Content="straight"/>
          <ComboBoxItem x:Name="wbtapered" Content="tapered"/>
        </ComboBox>

        <!--KeyDown="{Binding Path=profileDesc}"-->
        <!-- KeyDown="profileDesc_KeyDown" -->
        <TextBox x:Name="wbprofileDesc" Margin="18,0,20,1" Grid.Column="2" Grid.Row="0" GotFocus="wbprofileDesc_GotFocus"/>
        <TextBox x:Name="wbdepth" Text="{Binding ElementName=wbwidthvalue, Path=Content, Mode=OneWay}" Margin="10,0,73,1" Grid.Column="3" Grid.Row="0"/>
        <Label x:Name="wbwidthvalue" Margin="10,0,190,5" Grid.Column="2" FontSize="8" Grid.Row="1"/>
        <Label x:Name="wbthicknessvalue" Margin="118,0,82,5" FontSize="8" Grid.Row="1" Grid.Column="2"/>
        <Label x:Name="wblengthvalue" Margin="208,0,0,5" FontSize="8" Grid.Row="1" Grid.Column="2"/>
        <Label x:Name="wbnexwidthvalue" Margin="10,0,178,5" FontSize="8" Grid.Row="1" Grid.Column="3"/>
        <Label x:Name="wbdepthvalue" Grid.Row="1" Grid.Column="3" FontSize="8" Margin="132,0,31,5"/>
        <!--<Label x:Name="totalvalue" Margin="30,10,24,16" Grid.Row="3" Grid.Column="3"/>-->
      </Grid>
    </Grid>
  </DataTemplate>
</Window.Resources>

<ListBox x:Name="wbListDataTemplate"  
         ItemsSource="{Binding wbVisibleItems}"           
         ItemTemplate="{DynamicResource wbObjectsDataTemplate}"
         DataContext="{DynamicResource wbItem}"
         Background="{x:Null}"
         SelectedItem="{Binding wbSelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
         IsSynchronizedWithCurrentItem="True"
         Canvas.Top="51" Height="222" Width="686"/>

這是一個示例,您可以在事件處理程序內的DataTemplate找到控件:

private void wbprofileDesc_GotFocus(object sender, RoutedEventArgs e)
{
    TextBox wbprofileDesc = sender as TextBox;
    Grid parentGrid = wbprofileDesc.Parent as Grid;

    ComboBox wbselect = parentGrid.Children.OfType<ComboBox>().FirstOrDefault(x => x.Name == "wbselect");
    Label wbwidthvalue = parentGrid.Children.OfType<Label>().FirstOrDefault(x => x.Name == "wbwidthvalue");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM