Как вставить PivotItem в определенный индекс в Windows Phone 8?

В настоящее время я работаю с Pivot Control и хочу вставить PivotItem в определенный индекс на основе списка, который я получаю с сервера. Когда я пытаюсь выполнить код ниже, получаю исключение

MWPivot.Items.Clear();
        if(MCSManager.Instance.MWMenuItemsList.MW_HEADER_LIST !=null)
        {
            List<SUBPARAM> mw_header_list = new List<SUBPARAM>();
            mw_header_list = MCSManager.Instance.MWMenuItemsList.MW_HEADER_LIST.SUB_PARAMS;
            if(mw_header_list.Any(header=>header.SP_CODE.Equals("SERVICE_REQUEST")))
            {
                SUBPARAM SR_SUB_PARAM = mw_header_list.FirstOrDefault(item => item.SP_CODE.Equals("SERVICE_REQUEST"));
                PivotItem service_requestPivotItem = new PivotItem();
                service_requestPivotItem.Header = SR_SUB_PARAM.SP_TITLE;
                Grid SR_Grid = new Grid();
                SR_Grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) });
                SR_Grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });

                ReportsSearchBox = new PhoneTextBox();
                ReportsSearchBox.Hint = "Search Reports";
                ReportsSearchBox.ActionIcon = new BitmapImage(new Uri("/Images/search.png", UriKind.RelativeOrAbsolute));
                ReportsSearchBox.TextChanged += SearchReports;

                Grid.SetRow(ReportsSearchBox, 0);
                SR_Grid.Children.Add(ReportsSearchBox);

                reportsListBox = new ListBox();
                reportsListBox.Margin = new Thickness(10, 0, 10, 0);
                reportsListBox.HorizontalAlignment = HorizontalAlignment.Center;
                reportsListBox.ItemContainerStyle = App.Current.Resources["GenericListBoxContainerStyle"] as Style;
                reportsListBox.ItemTemplate = this.Resources["MWReportsTemplate"] as DataTemplate;
                reportsListBox.SelectionChanged += reportsListBox_SelectionChanged;

                Grid.SetRow(reportsListBox, 1);
                SR_Grid.Children.Add(reportsListBox);

                service_requestPivotItem.Content = SR_Grid;
                var sr_index = mw_header_list.FindIndex(item => item.SP_CODE.Equals("SERVICE_REQUEST"));
//Get Exception on below line 
                MWPivot.Items.Insert(sr_index, service_requestPivotItem);
            }

Исключение, которое я получаю, заключается в том, что указанный аргумент находится вне диапазона допустимых значений. индекс имени параметра

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

Пожалуйста, кто-нибудь предложите, как я могу выполнить мое требование?


person Kinjan Bhavsar    schedule 29.12.2015    source источник
comment
Каково значение sr_index и MWPivot.Items.Count, когда вы получаете исключение?   -  person Igor Kulman    schedule 29.12.2015
comment
MWPivot.Items.Count = 0 и sr_index = 0 на данный момент, но они могут отличаться в зависимости от параметра mw_header_list.   -  person Kinjan Bhavsar    schedule 30.12.2015


Ответы (2)


Похоже, вы пытаетесь добавить элемент в несуществующую позицию. Если, например, у вас есть коллекция из 3 элементов, вы можете добавлять новые элементы только в позиции 0,1,2,3, а не 4 или выше.

Поэтому добавьте проверку в свой код, чтобы справиться с этим и принять соответствующие меры (добавление элемента в конце, если индекс слишком высок или что-то в этом роде)

if (sr_index>MWPivot.Items.Count)
{
    MWPivot.Items.Add(service_requestPivotItem);
} else {
    MWPivot.Items.Insert(sr_index, service_requestPivotItem);
}
person Igor Kulman    schedule 30.12.2015
comment
Спасибо, это сработает в случае, если у меня есть 4 элемента в mw_header_list, и я создаю пользовательский интерфейс и добавляю элементы, но будет ли он вставлен в определенную позицию? Я хочу этого добиться. - person Kinjan Bhavsar; 30.12.2015
comment
А если просто попробовать для себя? StackOverflow здесь не для того, чтобы решить вашу проблему, а для того, чтобы помочь вам решить вашу проблему. - person Igor Kulman; 30.12.2015
comment
Я попробовал ваши предложения, но это не дает ожидаемых результатов, которых я хочу. - person Kinjan Bhavsar; 20.01.2016
comment
Так заставь его делать то, что ты хочешь, ты программист, компьютер твой раб - person Igor Kulman; 20.01.2016

Наконец-то я смог добиться того, чего хотел. Спасибо @IgorKulman за мотивацию.

Пожалуйста, найдите мой код ниже

 MWPivot.Items.Clear();
        MCSProgressIndicator.ActivateProgressIndicator(MCSManager.Instance.currentTextParams.COMMON_PLEASE_WAIT);
        if (MCSManager.Instance.MWMenuItemsList.MW_HEADER_LIST !=null)
        {
            mw_header_list = new List<SUBPARAM>();
            mw_header_list = MCSManager.Instance.MWMenuItemsList.MW_HEADER_LIST.SUB_PARAMS;
            foreach(var header in mw_header_list)
            {
                PivotItem mwPivotItem = new PivotItem()
                {
                    Name=header.SP_CODE,
                    Header=header.SP_TITLE
                };
                createViewForPivotItem(mwPivotItem, header.SP_CODE);
                MWPivot.Items.Add(mwPivotItem);
                //MWPivot.SelectionChanged += MWPivot_SelectionChanged;
            }
            if (userSettings.Contains("SelectedIndex"))
                MWPivot.SelectedIndex = Int32.Parse(userSettings["SelectedIndex"].ToString());
            MCSProgressIndicator.deactivateProgressIndicator();
        }

Надеюсь, это поможет кому-то. Я только что добавил динамику Pivot, используя цикл foreach.

person Kinjan Bhavsar    schedule 04.02.2016