Как установить выбранный элемент - PullRequest
3 голосов
/ 11 декабря 2010

Я пытаюсь установить значение / selecteditem элемента управления listpicker - из набора инструментов silverlight для Windows Phone 7 (когда пользователь хочет редактировать запись в xml, он извлекает данные из ввода-вывода и устанавливает их в текстеbox / listpickers).

В настоящее время я пытаюсь использовать:

ListPickerSub.SelectedItem = sub;

(sub - строка)

Но создается исключение System.InvalidOperationException

Additional information: SelectedItem must always be set to a valid value.

Ответы [ 3 ]

3 голосов
/ 12 декабря 2010

SelectedItem ожидает ListPickerItem (который является одним из элементов в списке).Вы передаете ему строку - отсюда и ошибка.

Возможно, вам будет проще установить SelectedIndex.

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

Редактировать:
Вот пример того, как вы можете связать со строками.Без работоспособного примера того, что вы на самом деле привязываете к источнику предметов, это лучшее, что я могу сделать.(Просто указать имя объекта или частичный код недостаточно.)

Предполагая:

<Controls:ListPicker x:Name="ListPickerSub">
    <Controls:ListPicker.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </Controls:ListPicker.ItemTemplate>
    <Controls:ListPicker.FullModeItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </Controls:ListPicker.FullModeItemTemplate>
</Controls:ListPicker>

Тогда я могу связать содержимое с помощью:

ListPickerSub.ItemsSource = SubItems();


private IEnumerable<string> SubItems()
{
    yield return "monday";
    yield return "tuesday";
    yield return "wednesday";
    yield return "thursday";
    yield return "friday";
    yield return "saturday";
    yield return "sunday";
}

и установите SelectedItem с помощью:

ListPickerSub.SelectedItem = "sunday";
2 голосов
/ 28 ноября 2011

Что-то вроде следующего:

ListPickerSub.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub);

Возможно, вам придется преобразовать содержимое в TextBlock и соответствующим образом изменить код. Вышеприведенное работает для моего случая, когда ListPicker динамически заполняется с помощью ListPickerItem.

0 голосов
/ 12 декабря 2010

Конечно, вы хотите установить данные в базовом источнике данных, а затем просто обновить свой список?

...