获取列表框值WP7

时间:2011-09-17 07:02:11

标签: c# xaml windows-phone-7

如何从文本块中获取值,该文本块存在于列表框....

这是代码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>

1 个答案:

答案 0 :(得分:0)

您没有直接从TextBlock获取值 相反,您所做的是将SelectedItem绑定到viewmodel上的属性。直接获取TextBlock的值会违反MVVM的原则(如果您使用该模式)。 viewmodel呈现数据,它不知道如何将数据呈现给UI。我不知道有三个TextBlock。

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

这意味着每次更改所选项目时,新值将填充到viewmodel上的bound属性中。您所要做的就是访问该对象 - 就像那样简单。这意味着您也可能能够摆脱SelectionChanged事件连接,具体取决于它正在做什么。

但是,如果您坚持获取用于在列表控件中显示任何特定数据项的模板实例,那么这是以编程方式执行此操作的方法:

myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem);

这将返回StackPanel及其内容,然后您可以使用FindName()或只是枚举子控件以找到您感兴趣的那个。

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