2011-09-17 119 views
0

如何從正文塊,這是目前在列表框中的值....獲取列表框值WP7

這裏是XAML代碼:

<ListBox Height="707" HorizontalAlignment="Left" Margin="12,0,0,0" Name="listBox1" VerticalAlignment="Top" Width="456" Background="White" Foreground="#FF09090C" ItemsSource="{Binding}" SelectionChanged="listBox1_SelectionChanged"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Name="textBlock3" FontSize="18" Foreground="Blue" Margin="2" Text="{Binding Title.Text}" TextWrapping="Wrap" /> 
       <TextBlock FontSize="16" Foreground="Gray" Margin="2" Text="{Binding Summary.Text}" TextWrapping="Wrap" /> 
       <TextBlock FontSize="1" Foreground="Gray" Margin="2" Text="{Binding Id}" TextWrapping="Wrap" Visibility="Collapsed" /> 
       <Button Name="h1" Content="Press" Height="10" Width="40"></Button> 
       <TextBlock Foreground="Gray" Margin="2" Text="________________________________________________________________________________________" FontSize="8"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

回答

0

不要直接從獲得的價值TextBlock。
取而代之的是將SelectedItem綁定到viewmodel上的一個屬性。直接獲取TextBlock的值將違反MVVM的原則(如果您使用的是該模式)。視圖模型呈現數據,它不知道如何將數據呈現給用戶界面。 IOW不知道有三個TextBlocks。

<ListBox Height="707" SelectedItem={Binding MyViewModelProperty} > 
    ... etc ... 

這意味着每當選定的項目發生更改時,新值將被填充到viewmodel的綁定屬性中。所有你需要做的就是訪問這個對象 - 就像那樣簡單。這意味着您可能也可以擺脫您的SelectionChanged事件連接,具體取決於它正在做什麼。

但是,如果你堅持要使用列表控件呈現任何特定的數據項的模板的實例,那麼這是做編程的方式:

myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem); 

這將返回你的StackPanel及其內容,則可以使用FindName()或只是枚舉子控件以找到您感興趣的那個。

FrameworkElement element = myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem) as FrameworkElement; 
if (element != null) 
    FrameworkElement child = element.FindName("myChildName");