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:
public class ElementsIndexesList
{
public List<string> Indexes = new List<string>();
public void Add()
{
Indexes.Add(Convert.ToString( Indexes.Count+1));
}
}
View:
<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:
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