2010-08-24 5 views
0

J'ai récemment commencé à utiliser la boîte à outils MVVM-Light et je suis bloqué sur le problème suivant: J'ai une base combinée Silverlight qui est liée à un viewmodel avec une ObservableCollection de type MyUser. Le Combobox implémente un DataTemplate personnalisé pour combiner le nom et le prénom de l'utilisateur. Après avoir chargé la liste des utilisateurs, comment puis-je configurer la Combobox pour sélectionner le premier utilisateur dans la liste et afficher cet utilisateur sélectionné dans la Combobox réduite? Je sais qu'il a été suggéré d'utiliser la propriété SelectedValue mais je n'ai pas réussi à l'utiliser avec SelectedItem ou SelectedValue. En d'autres termes, même si j'ai défini SelectedValue/SelectedItem après que la liste des utilisateurs a été chargée, MyUser sélectionné ne s'affiche pas comme sélectionné dans la liste déroulante, comment puis-je y parvenir? S'il vous plaît voir le XAML ci-dessous:Silverlight 4 Combobox avec selectedValue utilisant MVVM-Light

<ComboBox 
    ItemsSource="{Binding MyUsers, Mode=OneWay}" 
    SelectedItem="{Binding SelectedUser, Mode=TwoWay}" 
    IsEnabled="{Binding IsReady}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Name}"></TextBlock> 
        <TextBlock Text=" "></TextBlock> 
        <TextBlock Text="{Binding Surname}"></TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 

Le Afficher le code modèle est comme suit:

public ObservableCollection<MyUser> MyUsers 
{ 
    get 
    { 
     return myUsers; 
    } 
    set 
    { 
     if (myUsers == value) 
     { 
      return; 
     } 
     myUsers = value; 
     SelectedUser = myUsers.FirstOrDefault(); 
     IsReady = true; 
     RaisePropertyChanged("MyUsers"); 
    } 
} 

public MyUser SelectedUser 
{ 
    get 
    { 
     return selectedUser; 
    } 
    set 
    { 
     if (selectedUser == value) 
     { 
      return; 
     } 
     selectedUser = value; 
     RaisePropertyChanged("SelectedUser"); 
    } 
} 

Répondre

0

La réponse est simple, vous devez déclencher l'événement PropertyChanged pour la Liste des MyUsers avant de l'utilisateur sélectionné dans le viewModel, c.-à-d. notifier l'interface utilisateur que ItemsSource a changé avant de mettre à jour SelectedValue.

Questions connexes