Получение выбранной строки элемента из привязанного ListBox - PullRequest
3 голосов
/ 09 февраля 2012

У меня проблема с получением строки из связанного текстового блока в списке, когда я использую приведенный ниже код, я могу связать список, и в списке появляются элементы, но при нажатии на элемент в списке Я не получаю правильную строку, я печатаю окно сообщения с именами объектов вроде

"MyApp.Item"

появляется вместо. myApp - это имя приложения, а Item - имя моей модели, которую я привязываю к списку. Правильный текст из выбранного элемента отображался, когда список не был связан.

private void listBoxtrend_Tap(object sender, GestureEventArgs e)
{
    selectedText = "";

    selectedText = listBox.SelectedValue.ToString();

    MessageBox.Show(selectedText);
}

XML

<ListBox ItemsSource="{Binding Item}" Foreground="RoyalBlue" 
    Height="395" HorizontalAlignment="Center" 
    Margin="12,111,0,0" Name="listBox" 
    VerticalAlignment="Top" Width="438"
    TabIndex="10"  Tap="listBox_Tap" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock TextWrapping="Wrap" FontSize="26" HorizontalAlignment="Left"
                Name="tblItem" Text="{Binding ItemString}"
                VerticalAlignment="Top" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Я бы очень признателен, если бы вы могли мне помочь, спасибо

Ответы [ 5 ]

8 голосов
/ 09 февраля 2012

Вы привязываетесь к ItemString в TextBlock объекта DataTemplate и к коллекции Item в ListView. Таким образом, SelectedValue будет иметь тип Item. На самом деле вы должны делать что-то подобное в вашем обработчике Tap, чтобы получить значение ItemString ...

private void listBoxtrend_Tap(object sender, GestureEventArgs e)
{
    selectedText = "";

    var selected = listBox.SelectedValue as Item;
    selectedText = selected.ItemString;

    MessageBox.Show(selectedText);
}

В вашем примере ToString печатает имя класса. Вы также можете переопределить ToString в своей модели Item, чтобы она была такой, какой вы хотите, чтобы была строка.

Примечание: типы и тому подобное могут быть немного не такими, как я догадался, основываясь на том, что вы написали в своем вопросе. Кроме того, нет необходимости устанавливать selectedText в пустую строку, которая будет просто перезаписана в третьей строке выше. Я хотел сохранить это, чтобы вы могли понять, что я изменил в вашем коде.

3 голосов
/ 05 марта 2013

Это очень просто, попробуйте следующее:

string selectedText = ListBox.GetItemText(ListBox.SelectedItem);
1 голос
/ 18 сентября 2012

Попробуйте это ...

string ListBoxConent  = ((ListBoxItem)listbox.SelectedItem).Content.ToString();
1 голос
/ 09 февраля 2012

Вам также нужно установить SelectedItem в Listbox на что-нибудь.

SelectedItem = {Binding SelectedItem}

и переименовать ваш ItemsSource в «Items», так как это имеет больше смысла.

Ваш SelectedItem в вашем коде позадиили ваша ViewModel должна содержать свойство:

public class Item
{
    public string ItemString { get;set; }
}
0 голосов
/ 09 февраля 2012

Попробуйте

  listBox.SelectedItem.ToString()

Если свойство не указано в ValueMember, SelectedValue возвращает результаты метода объекта ToString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...