簡體   English   中英

LongListSelector C#-如何從分組的數據列表中以字符串形式獲取SelectedItem-Windows Phone Silverlight 8.1

[英]LongListSelector C# - How to get SelectedItem as string from grouped data list - Windows Phone Silverlight 8.1

我正在用C#構建我的第一個WP Silverlight 8.1應用程序,所以還是個新手!

我的應用程序中有一個LongListSelector,它允許用戶選擇一個房間。 當用戶點擊房間時,我希望房間名稱(例如“ N01”,“ N07”,“ N12”-參見下面的代碼!)存儲為字符串。

我將房間存儲在一個分組的列表中-列表“ dataSource”綁定到LongListSelector(順便說一句稱為“ 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?

謝謝!

我不知道確切的分組列表是什么,但是如果您的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”,因為您將類型本身轉換為字符串(返回名稱空間和類型名稱),而不是實例selectedRoom的string屬性。

相反,您應該這樣做:

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

要么

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

(在這種情況下,您甚至不需要ToString(),因為Location和ClassNumber都是字符串。)

您還可以覆蓋RoomList的ToString()方法:

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

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

在這種情況下,selectedRoom.ToString()將返回“ north,n01”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM