[英]Getting Listbox Value WP7
如何從列表框中顯示的textblock中獲取值...
這是代碼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>
您不會直接從TextBlock獲取值。
相反,您要做的是將SelectedItem綁定到視圖模型上的屬性。 直接獲取TextBlock的值將違反MVVM的原則(如果使用的是該模式)。 視圖模型顯示數據,但不知道如何將數據呈現到UI。 IOW,它不知道有三個TextBlocks。
<ListBox Height="707" SelectedItem={Binding MyViewModelProperty} >
... etc ...
這意味着每次更改所選項目時,新值將填充到視圖模型的bound屬性中。 然后,您要做的就是訪問該對象-就這么簡單。 這意味着您還可能可以擺脫SelectionChanged
事件連接,具體取決於它在做什么。
但是,如果您堅持要獲取用於在列表控件中呈現任何特定數據項的模板的實例,那么這是通過編程方式執行的方法:
myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem);
這將返回您的StackPanel及其內容,然后可以使用FindName()或只枚舉子控件以找到您感興趣的控件。
FrameworkElement element = myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem) as FrameworkElement;
if (element != null)
FrameworkElement child = element.FindName("myChildName");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.