Получение значения Listbox WP7 - PullRequest
       0

Получение значения Listbox WP7

0 голосов
/ 17 сентября 2011

как получить значение из текстового блока, который присутствует в списке ....

вот код 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 голосов
/ 17 сентября 2011

Вы не получаете значение напрямую из TextBlock.
Вместо этого вы привязываете SelectedItem к свойству вашей модели представления.Чтобы получить значение TextBlock напрямую, будет нарушаться принцип MVVM (если вы используете этот шаблон).Модель представления представляет данные, она не имеет ни малейшего представления о том, как эти данные отображаются в пользовательском интерфейсе.То есть он даже не подозревает, что существует три текстовых блока.

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

Это означает, что каждый раз, когда выбранный элемент изменяется, новое значение будет вставлено в привязанное свойство в модели представления.Все, что вам нужно сделать, это получить доступ к этому объекту - это так просто.Это означает, что вы также можете избавиться от перехвата событий SelectionChanged, в зависимости от того, что он делает.

Однако, если вы настаиваете на получении экземпляра шаблона, используемого для представления какого-либо конкретного элемента данныхв элементе управления списком, то есть способ сделать это программно:

myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem);

Это вернет вам StackPanel и его содержимое, вы можете затем использовать FindName () или просто перечислить дочерние элементы управления, чтобы найтитот, который вас интересует.

FrameworkElement element = myListBox.ItemContainerGenerator.ContainerFromItem(myDataItem) as FrameworkElement;
if (element != null)
    FrameworkElement child = element.FindName("myChildName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...