繁体   English   中英

获取列表框值WP7

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM