J'ai une liste déroulante dont la propriété ItemsSource est liée à une propriété ObservableCollection et sa propriété SelectedIndex est liée à une propriété entière respectivement.Pourquoi l'implémentation d'ObservableCollection plante-t-elle mon application Silverlight?
<ComboBox Name="cmbDealt" ItemsSource="{Binding Path=DealList, Mode=TwoWay}" SelectedIndex="{Binding Mode=TwoWay, Path=DealIndex}"></ComboBox>
<CheckBox IsChecked="{Binding Mode=TwoWay, Path=SomeCondition}" Content="Some Condition"></CheckBox>
Ma structure de données ressemble
private ObservableCollection<string> m_DealList = null;
private int m_DealIndex = 0;
private bool m_SomeCondition = false;
public ObservableCollection<string> DealList
{
get
{
if (m_DealList == null)
m_DealList = new ObservableCollection<string>();
else
m_DealList.Clear();
if (m_SomeCondition)
{
m_DealList.Add("ABC");
m_DealList.Add("DEF");
}
else
{
m_DealList.Add("UVW");
m_DealList.Add("XYZ");
}
return m_DealList;
}
}
public int DealIndex
{
get { return m_DealIndex; }
set
{
if (value != -1)
{
m_DealIndex = value;
}
}
}
public bool SomeCondition
{
get { return m_SomeCondition; }
set
{
m_SomeCondition = value;
OnPropertyChanged("DealList");
OnPropertyChanged("DealIndex");
}
}
avec succès Maintenant, les charges d'application. Toutefois, lorsque l'utilisateur modifie l'élément SelectedIndex de la zone de liste déroulante à 1 à partir de 0, puis coche la case à cocher (afin d'appeler l'événement modifié de la propriété "DealIndex"), l'application se bloque.
Je ne sais pas pourquoi cela pourrait se produire. Quelqu'un peut-il faire la lumière et proposer une solution?
TIA ... Sudeep
Salut Zachary, SelectedIndex fonctionne bien dans les scénarios normaux. Ce n'est que lorsque nous essayons d'actualiser-n-relier la collection, puis que nous définissons l'élément SelectedIndex immédiatement, qu'il échoue. Je lisais sur un blog qu'il semble que OnPropertyChanged() de ObservableCollection prend un peu de temps, donc quand OnPropertyChanged() de SelectedIndex est déclenché juste après OnPropertyChanged() de ObservableCollection, il n'y a probablement pas de données pour définir l'index. J'ai testé cela d'une manière grossière et cela s'avère peut-être vrai. Mais je suis toujours déconcerté par cela et j'attends une bonne approche. – Sudeep