ListBox selectedItem obtenir un travail, mais pas de travail dans MVVM

Je suis en train de travailler sur une application WPF et à la suite de MVVM. À mon avis, il y a une grille qui contient des colonnes différentes. L'une de ces colonnes est une zone de liste. Maintenant problème c'est que pour la zone de liste de la colonne, SelectedItem obtenir fonctionne très bien mais le jeu ne fonctionne pas.

Voici mon code d'Affichage

<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" SelectionMode="Single">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" Header="Name" />
        <DataGridTemplateColumn Header="Actions">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ListBox DisplayMemberPath="Name" ItemsSource="{Binding Actions}" SelectedItem="{Binding SelectedAction}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Dans mon ViewModel, j'ai ViewModel Principal de la classe, qui contient une liste d'Éléments. Classe de l'élément contient le nom, une liste d'activités et de l'action sélectionnée.

public class MyViewModel : INotifyOfPropertyChanged
{
    private ObservableCollection<Item> _items;
    public ObservableCollection<Item> Items
    {
        get { return _items?? (_items= new ObservableCollection<Item>); }
    }

    private Item _selectedItem;
    public Item SelectedItem
    {
        get { return _selectedItem; }
        set { _selectedItem= value; }
    }
}

public class Item : INotifyOfPropertyChanged
{
    public string Name;

    private ObservableCollection<string> _actions;
    public ObservableCollection<string> Actions
    {
        get { return _actions?? (_actions= new ObservableCollection<string>); }
    }

    private string _selectedAction;
    public string SelectedAction
    {
        get { return _selectedAction; }
        set { _selectedAction = value; }
    }
}

Maintenant SelectedItem pour les Éléments de liste fonctionne très bien. Mais SelectedItem insde de classe de l'Élément pour les Actions qui ne fonctionne pas complètement. J'ai inséré des points d'arrêt sur les getter et setter de SelectedAction. obtenez point d'arrêt est atteint. Mais si je sélectionne une action à partir de l'INTERFACE de définir un point d'arrêt pour SelectedAction ne pas se faire frapper.

Quel est le problème.

ListBox selectedItem obtenir un travail, mais pas de travail dans MVVM

Lorsque je sélectionne Projet d'Archives ou de Rétablir le Projet, poseur de SelectedAction n'est pas appelée.

REMARQUE: j'ai supprimé les informations inutiles comme le chargement des données dans des listes, la mise en œuvre de INotifyOfPropertyChanged etc.

  • vous post "Maintenant SelectedItem pour les Éléments de liste fonctionne très bien..." où est cette partie de code, qui fonctionne bien?
  • dans MyViewModel classe. SelectedItem.
  • Grille de données en vue est lié à des Éléments (Liste) MyViewModel classe.
  • que signifie SelectedItem de MyViewModel fonctionne bien?
  • "Mais SelectedItem insde de classe de l'Élément pour les Actions qui ne fonctionne pas complètement." Et où est la partie de code qui ne fonctionne pas?
  • Oui. Mais pour des Actions selectedItem ne fonctionne pas.
  • Avez-vous également supprimé le code qui appelle la INotifyOfPropertyChanged manifestation en cas de valeur de la propriété de changer?
  • chaîne SelectedAction" ici. Il pourrait être source de confusion. Il y a une liste d'Élément(Classe). Dans la classe de l'Élément, il existe une autre liste. La liste interne ne fonctionne pas.
  • Le Code est mis en œuvre, mais je n'ai pas écrit ici.
  • Oui c'est confus pour moi
  • juste pour s'assurer que nous entendons la même chose... vous avez quelque chose comme si (PropertyChanged != null) { PropertyChanged(ce, nouveau PropertyChangedEventArgs(propertyName)); } dans votre setters?
  • Non, ce n'est pas présente dans setter.
  • ces lignes sont présentes dans la classe, mais je n'appelle pas NotifyOfPropertyChange dans SelectedAction setter.
  • Avez-vous essayé de mise en œuvre de IEditableObject dans votre classe de l'Élément?
  • nope. Je n'ai pas la moindre idée à ce sujet.
  • Essayez de mettre en place quelque chose comme dans cette msdn lien: msdn.microsoft.com/en-us/library/.... Je ne peux pas garantir de bien, mais il semble une exigence pour la grille d'édition

InformationsquelleAutor fhnaseer | 2013-05-14