2015-11-18 3 views
1

Я строю свое первое приложение WP Silverlight 8.1 на C#, так что все еще новичок!LongListSelector C# - Как получить SelectedItem как строку из списка сгруппированных данных - Windows Phone Silverlight 8.1

У меня есть LongListSelector в моем приложении, которое позволяет пользователю выбирать комнату. Когда пользователь вступает в комнату, я хочу, чтобы имя комнаты (например, «N01», «N07», «N12» - см. Код ниже!), Чтобы быть сохраненным в виде строки.

У меня есть комнаты, хранящиеся в сгруппированном списке - список 'dataSource' привязан к LongListSelector (какой btw называется longListSelectorState).

Вот мой C# код списка:

namespace WPLongListSelectorDemo 
{ 
public partial class MainPage : PhoneApplicationPage 
{ 
    List<RoomList> dataSource; 
    // Constructor 
    public MainPage() 
    { 

     InitializeList(); 
     InitializeComponent(); 
    List<RoomGroup<RoomList>> DataSource = RoomGroup<RoomList>.CreateGroups(dataSource, 
      System.Threading.Thread.CurrentThread.CurrentUICulture, 
      (RoomList s) => { return s.RoomName; }, true); 
     longListSelectorState.ItemsSource = DataSource; 
     // Sample code to localize the ApplicationBar 
     //BuildLocalizedApplicationBar(); 
    } 

    private void InitializeList() 
    { 
     dataSource = new List<RoomList>(); 
     //North Rooms - Classrooms 
     dataSource.Add(new RoomList("N01", "North")); 
     dataSource.Add(new RoomList("N02", "North")); 
     dataSource.Add(new RoomList("N03", "North")); 
     dataSource.Add(new RoomList("N04", "North")); 
     dataSource.Add(new RoomList("N05", "North")); 
     dataSource.Add(new RoomList("N06", "North")); 
     dataSource.Add(new RoomList("N07", "North")); 
     dataSource.Add(new RoomList("N08", "North")); 
     dataSource.Add(new RoomList("N09", "North")); 
     dataSource.Add(new RoomList("N10", "North")); 
     dataSource.Add(new RoomList("N11", "North")); 
     dataSource.Add(new RoomList("N12", "North")); 
     dataSource.Add(new RoomList("N13", "North")); 
     dataSource.Add(new RoomList("N14", "North")); 
     dataSource.Add(new RoomList("N15", "North")); 
     dataSource.Add(new RoomList("N16", "North")); 
     dataSource.Add(new RoomList("N17", "North")); 
     dataSource.Add(new RoomList("N18", "North")); 
     dataSource.Add(new RoomList("N19", "North")); 
     dataSource.Add(new RoomList("N20", "North")); 
     dataSource.Add(new RoomList("N21", "North")); 

Список на самом деле больше, чем это, но я сократить его немного здесь. В списке более 100 элементов.

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

private void longListSelectorState_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var selectedRoom = longListSelectorState.SelectedItem; 
     MessageBox.Show(selectedRoom.ToString()); 

    } 

Но окно сообщения просто показывает 'WPLongListSelectorDemo.RoomList' как SelectedItem. WPLongListSelector - это пространство имен, а RoonList - это имя списка, поэтому я думаю, но это не то, что я хочу! Например, я хочу сказать «N01».

Как мне получить фактическую комнату из списка как SelectedItem в виде строки?

Спасибо!

ответ

0

Я не знаю, что именно группироваться список есть, но если ваш класс RoomList выглядит, например, как-то так:

internal class RoomList 
{ 
    public string Location { get; set; } 
    public string ClassNumber { get; set; } 
} 

и создать новый экземпляр RoomList

RoomList selectedRoom = new RoomList() 
{ 
    Location = "north", 
    ClassNumber = "n01" 
} 

и вы вызываете selectedRoom .ToString(), вы получите «WPLongListSelectorDemo.RoomList», потому что вы преобразовываете сам тип в строку (которая возвращает пространство имен и имя типа), а не свойство string экземпляра selectedRoom.

Вместо этого, вы должны сделать это:

MessageBox.Show(selectedRoom .Location.ToString()) 

или

MessageBox.Show(selectedRoom.ClassNumber.ToString()). 

(. В этом случае, вам не нужно даже ToString(), так как Место и ClassNumber являются строки)

Вы также можете переопределить метод ToString() из RoomList:

internal class RoomList 
{ 
    public string Location { get; set; } 
    public string ClassNumber { get; set; } 

    public override string ToString() 
    { 
     return Location + ", " + ClassNumber; 
    } 
} 

В этом случае выбранный Room.ToString() вернет «север, n01».