#silverlight #windows-phone-7 #listbox #controltemplate #selectedindex
#silverlight #windows-phone-7 #listbox #controltemplate #выбранный индекс
Вопрос:
У меня есть Listbox:
<ListBox x:Name="FriendsRequestList">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel>
<TextBlock Text="{Binding FullName}" Foreground="#FF316DCB"/>
<TextBlock Text="{Binding RequestText}" />
<StackPanel Orientation="Horizontal">
<Button Name="Accept" Content="Accept" Click="Accept_Click" Foreground="#FF28901F" Background="#FFB4D8BA"/>
<Button Name="Decline" Content="Decline" Click="Decline_Click" Foreground="#FF28901F" Background="#FFB4D8BA"/>
</StackPanel>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</Listbox>
И я пробую это в коде:
private void Accept_Click(object sender, RoutedEventArgs e)
{
Button clickedButton = sender as Button;
StackPanel st1 = clickedButton.Parent as StackPanel;
StackPanel st2 = st1.Parent as StackPanel;
StackPanel st3 = st2.Parent as StackPanel;
object parentControl = st3.Parent;
object obj = FriendsRequestList.Items[3];
int index1 = FriendsRequestList.Items.IndexOf(obj);
int index2 = FriendsRequestList.SelectedIndex;
int SenderId = FriendRequests.ElementAt(index).SenderID;
UserServices.FriendRequestAccept(this, SenderId);
UserServices.GetRequests(this);
}
index2 равен -1, а ParentControl равен нулю. Почему ListItem.Выбранный индекс равен -1?
И как я могу узнать, какая кнопка ListItem нажата?
Комментарии:
1. используете ли вы выражение Blend 4?
Ответ №1:
ListBox.SelectedIndex
Свойство, вероятно, равно -1, потому что Button
перехватывается событие click, и оно не распространяется на ListBox
. В любом случае, вам не нужен индекс, чтобы делать то, что вы пытаетесь сделать.
Допустим, вы установили ItemsSource
следующим образом:
FriendsRequestList.ItemsSource = FriendRequests;
Теперь, предполагая, что FriendRequests
есть какая-то коллекция, содержащая FriendRequest
объекты, каждый из которых содержит свойства FullName
, RequestText
и т.д., Измените обработчик щелчка на
private void Accept_Click(object sender, RoutedEventArgs e)
{
FriendRequest req = ( sender as Button ).DataContext as FriendRequest;
int senderID = req.SenderID;
...
}
Комментарии:
1. FriendsRequestList.SelectedItem = clickedButton. DataContext; int index = FriendsRequestList.SelectedIndex; int SenderID = Запросы друзей. Элементат (индекс). SenderID;
2. @AramGevorgyan Это тоже работает, но ИМО, это неправильный способ сделать это. Я не понимаю, почему вы не можете просто получить
SenderID
из DataContext кнопки вместо настройкиListBox.SelectedItem
и полученияListBox.SelectedIndex
.3. Извините, я вас не понимаю. Я точно установил ListBox.SelectedItem, а затем получил его SelectedIndex.
4.@AramGevorgyan Да, но вам вообще не нужно возиться со ListBox. Посмотрите на код, который я опубликовал.
( sender as Button ).DataContext
совпадает с объектом, который вы извлекаете с помощьюFriendRequests.ElementAt(index)
. Итак, полностью забудьте о ListBox, просто приведите DataContext отправителя и получитеSenderID
от этого.