ComboBox problem z odświeżaniem zawartości kontrolki

ComboBox problem z odświeżaniem zawartości kontrolki
0

Witam serdecznie,
mam prostą aplikację składającą się z przycisku i ComboBoxa.

Aplikacja działa w następujący sposób. Po kliknięciu na przycisk dodawany jest element do listy Indexes, która jest zbindowana z ComboBox (przepraszam za skróty myślowe).
Kliknięcie na wyżej wymieniony przycisk powoduje wybranie jako SelectedIndex ostatniego elementu listy.
Aplikacja działa zgodnie z założeniami do momentu w którym nie wybiorę innego elementu w ComboBox.
Po kliknięciu w przycisk ComboBox wyświetla wybrany przeze mnie element zamiast ostatniego elementu z listy, dopiero za drugim kliknięciem w przycisk ComboBox wyświetla ostatni element z listy.

Poniżej zamieszczam kod:

Pseudo Model:

Kopiuj
public class ElementsIndexesList
    {
        public List<string> Indexes = new List<string>();

        public void Add()
        {
            Indexes.Add(Convert.ToString( Indexes.Count+1));
        }
     }

View:

Kopiuj
<ComboBox x:Name="ToElement" Text="{Binding ToElement}" ItemsSource="{Binding IndexesList}" SelectedIndex="{Binding IndexesListCount, Mode=OneWay}"/>
<Button x:Name="Add" Command="{Binding AddCommand}" Content="Add"/>

ViewModel:

Kopiuj
public class BaseViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChange([CallerMemberName]string propertyName = null)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }


public class NewViewModel: BaseViewModel
    {
        private ElementsIndexesList IndexesListModel = new ElementsIndexesList();

        private int _indexesListCount;
        public int IndexesListCount
        {
            get { return _indexesListCount; }
            set { _indexesListCount = value; OnPropertyChange();}
        }

        private ObservableCollection<string> _indexesList;
        public ObservableCollection<string> IndexesList
        {
            get { return _indexesList; }
            set { _indexesList = value; OnPropertyChange(); }
        }
        
        public NewViewModel()
        {
            AddCommand = new DelegateCommand(Add, CanAdd);      
        }

        public DelegateCommand AddCommand { get; set; }
        
        private bool CanAdd(object obj)
        {
            return true;
        }

        private void Add(object obj)
        {
            IndexesListModel.Add();
            IndexesList = new ObservableCollection<string>(IndexesListModel.Indexes);
            IndexesListCount = IndexesList.Count;
        }
    }

Pozdrawiam i z góry dziękuję za pomoc.

grzesiek51114
grzesiek51114
Nie, ja już nie chcę ;-) Mam dość WPF'a. @Ktos wołam!! ;)
MT
Jeżeli niewłaściwie sformułowałem temat to przepraszam
MT
A z drugiej strony to nie wiem jakim cudem dodałem ten post jako gość
MA
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad rok
  • Postów:24
0

wrzuć projekt VS, bo nie chce mi się tworzyć, a już od paru miesięcy nie robiłem nic poważnego na WPF :P, ale pamiętam, że kiedyś już to ogarniałem ;)

MT
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
1

Projekt w załączniku, przepraszam że taka amatorszczyzna ale się śpieszyłem

neves
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 11 godzin
  • Lokalizacja:Kraków
  • Postów:1114
2

Indeksowanie jest od zera, więc zmień tą linijkę:

Kopiuj
 IndexesListCount = IndexesList.Count;

na tą :

Kopiuj
 IndexesListCount = IndexesList.Count - 1;

MT
Bardzo dziękuję za pomoc, przeoczenia chyba najtrudniej jest wykryć. Pozdrawiam serdecznie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.