В моем приложении есть страница «Сохранить / Изменить».
Текущий поток выглядит следующим образом: у пользователя есть главная страница со списком элементов. Он может нажать на кнопку «Добавить», она переходит на страницу «Добавить», на которой он может ввести информацию и сохранить ее. Как только он это сделает, информация сохраняется и отображается в списке.
Если он щелкает по списку, он переходит на страницу «Изменить», на которой он может изменить информацию.
На самом деле страницы «Добавить» и «Редактировать» одинаковы, у второго поля заполнены, а у первого нет.
У меня есть 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 вызывается параллельно для всех членов коллекции, поэтому я попробовал второй подход. Отладка не привела меня ни к какому ответу.
Кто-нибудь сталкивался с подобной ситуацией?
Что я могу сделать, чтобы значение списка было выбрано, когда пользователь заходит на страницу «Редактировать»?
Спасибо,
Оскар