#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}»