locked
ListView и Tuple RRS feed

  • Вопрос

  • в продолжение темы

    из сервиса беру данные

                    List<Tuple<int, string>> list = new List<Tuple<int, string>>();
    
                    var ntName = mc.Tenders.Select(c => c.NameTenders).ToList();
                    var ntID = mc.Tenders.Select(c => c.IdTenders).ToList();
    
                    for (int i = 1; i <= mc.Tenders.Count(); i++)
                    {
                        list.Add(new Tuple<int, string>(Convert.ToInt32(ntID[i]), ntName[i].ToString()));
                    }
                    return list;

    Ну можно оптимизировать конечно но это потом.

    На клиенте принимаю

            private async Task<List<Tuple<int, string>>> ReadtenderNameID()
            {
                try
                {   
    
                    IService1 serv = new Service1Client();
                    var result = await serv.GetListTenderNameIDAsync();
    
                    return result ;
                }
                catch (Exception)
                {
                    throw;
                }
            }
                    ListViewLisTenders.ItemsSource = new List<Tuple<int, string>>();
                    ListViewLisTenders.ItemsSource = await this.ReadtenderNameID();

    Выдаёт ошибку. Но почему то к списку ошибку. Одиночное значение выдаётся хорошо. С этим я разберусь. А что дальше? Как выбрать ID по выбранному Item в ListView?

    Selected.Value - это item2?

    А Item1 как выбрать?


    Спасибо



    • Изменено developers_s 14 декабря 2012 г. 6:24
    14 декабря 2012 г. 6:22

Ответы

  • Во-первых, вот это присвоение:

    ListViewLisTenders.ItemsSource = new List<Tuple<int, string>>();

    лишнее.

    Во-вторых, вот так:

    int id = ((Tuple<int, string>)ListViewLisTenders.SelectedItem).Item1;


    17 декабря 2012 г. 6:19
    Отвечающий
  • Одна тема, один вопрос. Новые вопросы, лучше задавать в отдельной теме.

    Да, можно. Например, у ListView есть замечательное свойство DisplayMemberPath. Также можно задать ItemTemplate. Первый вариант, когда вам нужно показывать одно свойство. Второй, если разметка элемента отличается от табличной. Но можно, в вашем случае, задать вот такой простой:

    <ListView>
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Item2}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

    17 декабря 2012 г. 8:54
    Отвечающий

Все ответы

  • Какую ошибку выдаёт? Что за упорное нежелание приводить полную информацию...

    for (int i = 1; i <= mc.Tenders.Count(); i++)
    Индексы отродясь были с нуля, и на единицу меньше, чем общее количество (то есть <= надо заменить на < ).

    14 декабря 2012 г. 9:36
  • А что дальше? Как выбрать ID по выбранному Item в ListView?

    Selected.Value - это item2?

    А Item1 как выбрать?


    Спасибо



    Ещё раз уточню вопрос в этом

    Спасибо

    17 декабря 2012 г. 4:02
  • Во-первых, вот это присвоение:

    ListViewLisTenders.ItemsSource = new List<Tuple<int, string>>();

    лишнее.

    Во-вторых, вот так:

    int id = ((Tuple<int, string>)ListViewLisTenders.SelectedItem).Item1;


    17 декабря 2012 г. 6:19
    Отвечающий
  • А отображение только Item2 в ListView - это через
    <ListView.View>
        <GridView>
            <GridViewColumn
    или можно как то отобразить без GridView?

    Спасибо

    17 декабря 2012 г. 8:47
  • Одна тема, один вопрос. Новые вопросы, лучше задавать в отдельной теме.

    Да, можно. Например, у ListView есть замечательное свойство DisplayMemberPath. Также можно задать ItemTemplate. Первый вариант, когда вам нужно показывать одно свойство. Второй, если разметка элемента отличается от табличной. Но можно, в вашем случае, задать вот такой простой:

    <ListView>
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Item2}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

    17 декабря 2012 г. 8:54
    Отвечающий