Выбранный элемент в окне списка доступа из пользовательского элемента управления Windows phone 7

#c# #silverlight #windows-phone-7

#c# #silverlight #windows-phone-7

Вопрос:

Мне нужно получить доступ к выбранному элементу списка из пользовательского элемента управления. Как я могу этим управлять? Например, если у меня есть ListBox x:Name="NewPicturesListBox" в MainPage.xaml

 !--Panorama item New one-->
            <controls:PanoramaItem Header="New one"  Name="Pan1" >
                <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                    <ListBox Margin="0,0,-12,0" x:Name="NewPicturesListBox"
  

И мне нужно получить к ним доступ из DetailControl.xaml.cs
Приведенный ниже код может дать мне результат на главной странице.xaml, как насчет других страниц, если существует какая-либо возможность?

                 if (NewPicturesListBox.ItemContainerGenerator != null)
                {
                    var contextMenuListItem = (ListBoxItem)(NewPicturesListBox.ItemContainerGenerator.ContainerFromItem(((MenuItem)sender).DataContext));
                    if (contextMenuListItem != null)
                    {
                        var selectedPicture = (contextMenuListItem).Content as Picture;
  

Комментарии:

1. Как вы добавляете элементы в ListBox ? С помощью привязки (используя DataTemplate для текстового поля в XAML) или с помощью кода? Можете ли вы опубликовать еще немного кода?

2. С привязкой <ListBox Margin="0,0,-12,0" x:Name="NewPicturesListBox" ItemsSource="{Binding NewPictures}" <ListBox.ItemTemplate> <DataTemplate> </DataTemplate> </ListBox.ItemTemplate> </ListBox>

Ответ №1:

У вас может быть ViewModel и свойство, давайте назовем это selectedPicture, которое будет содержать SelectedValue, и привяжем к нему из вашего XAML :

    <ComboBox Name="NewPicturesListBox" MinWidth="100" VerticalAlignment="Center" 
                                  ItemsSource="{Binding ListOfPictures}" 
                                  DisplayMemberPath="Name"
                                  SelectedValue ="{Binding Path=SelectedPicture}"  Width="141" />
  

Комментарии:

1. Просто убедитесь, что вы используете привязку twoway к выбранному свойству listbox, иначе некоторые события не будут реплицироваться. — Выбранное значение =»{Путь привязки= выбранное изображение, режим = TwoWay}»