Выберите «старое значение» в списке на странице редактирования. - PullRequest
0 голосов
/ 19 января 2011

В моем приложении есть страница «Сохранить / Изменить». Текущий поток выглядит следующим образом: у пользователя есть главная страница со списком элементов. Он может нажать на кнопку «Добавить», она переходит на страницу «Добавить», на которой он может ввести информацию и сохранить ее. Как только он это сделает, информация сохраняется и отображается в списке. Если он щелкает по списку, он переходит на страницу «Изменить», на которой он может изменить информацию.

На самом деле страницы «Добавить» и «Редактировать» одинаковы, у второго поля заполнены, а у первого нет.

У меня есть 3 списка на этой странице, один для серьезностей, один для категорий и один для репортера. Эта информация выбирается в списке перед сохранением, а на этапе редактирования она должна выбираться автоматически, чтобы пользователь знал «старое» значение. Чтобы выбрать значения автоматически, я попробовал два подхода:

1-В моем xaml:

<ListBox Height="103" Name="lbSeverities" Width="439" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Single" ItemsSource="{Binding Severities}" DisplayMemberPath="Name" SelectedItem="{Binding Task.Severity}"/>

И я также переопределяю метод Equals класса серьезности на разумную реализацию.

2- В моем xaml

<ListBox Height="103" Name="lbSeverities" Width="439" HorizontalAlignment="Left" Margin="20,0,0,0" SelectionMode="Single" ItemsSource="{Binding Severities}" DisplayMemberPath="Name" SelectedIndex="{Binding Task.Severity, Converter={StaticResource SeverityToIndexConverter}}"/>

И я создал SeverityToIndexConverter с этим кодом:

public class SeverityToIndexConverter : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null && value is Severity)
            {
                Severity currentSeverity = (Severity)value;
                for (int i = 0;  i <   (App.Current as App).MainViewModel.Severities.Count; i++)
                {
                    Severity sev = (App.Current as App).MainViewModel.Severities[i];
                    if (currentSeverity.ID == sev.ID)
                        return i;
                }
            }
            return -1;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

Оба они представили одинаковые результаты: иногда значения выбираются автоматически, а иногда нет. Это очень нестабильно, когда он выбран. Я представлял себе какое-то исключение, пытался его уловить, но ничего не получил. Я также попытался отладить, я заметил, что в случае 1 метод equals вызывается параллельно для всех членов коллекции, поэтому я попробовал второй подход. Отладка не привела меня ни к какому ответу.

Кто-нибудь сталкивался с подобной ситуацией? Что я могу сделать, чтобы значение списка было выбрано, когда пользователь заходит на страницу «Редактировать»?

Спасибо, Оскар

1 Ответ

1 голос
/ 25 марта 2011

Я делаю то же самое.Мой xaml выглядит как ваш первый пример.

Вот что я бы сделал:

Создайте новое свойство с именем Severity.В геттер возвращаем Task.Severity.Привязать список SelectedItem к новому свойству.

Это также может быть связано с синхронизацией, поэтому вам может потребоваться вызвать NotifyPropertyChanged для нового свойства, когда список загрузит свой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...