0
votes

Bind ArticlesSource de SeciPeyItem

Ceci est ma structure de données: xxx pré>

et ceci est mon point de vue: p>

<ListBox x:Name="moviesListBox" ItemsSource="{Binding Movies}" SelectedItem="{Binding SelectedMovie, Mode=TwoWay}" />
<ListBox x:Name="actorsListBox" ItemsSource="{Binding SelectedMovie.Actors}" SelectedItem="{Binding SelectedActor, Mode=TwoWay}" />


5 commentaires

Comment sélectionnémovie.cast défini?


@Lewstherin Désolé, il devrait y avoir acteurs . Sa faute de frappe quand je copie cela pour donc .


Complètement incertain, mais juste par la similitude avec Winforms, il y a-t-il selectedValue = {} attribut disponible? Si oui, peut valoir la peine d'essayer?


Est sélectionnéeMovie une propriété de la classe MovieviewModel et incendie-t-il une notification de changement de propriété?


Pouvez-vous confirmer que la liste des acteurs est remplie? Votre code pourrait aller bien mais sans données! Vous avez également un datatemplate pour acteurs? Pourquoi avez-vous besoin de noms dans vos boîtes de liste?


3 Réponses :


0
votes

Vous n'avez pas montré où / comment sélectionnez MMOVIE (comment il existe dans sa vue de vie), mais

  1. La vue de la vue dans laquelle SelectedMovie est contenue (probablement DataContext du formulaire / page contenant les commandes de la liste de liste) doit implémenter l'interface INOTIFYPROPERTYCHANGED (la vue de la lumière MVVMModelbase le fait pour vous) P> li>

  2. La propriété sélectionnéeMOVIE doit soulever l'événement de l'état de propriété dans son setter. Si vous utilisez la lumière MVVM, ViewModelBase fournit une méthode définie pour le faire pour vous. P> LI> ol>

    exemple (à l'aide de la lumière MVVM; NOTE J'ai omis beaucoup de détails à vous concentrer sur le problème de base): P>

    <Window 
        DataContext={Binding MyViewModel, Source={StaticResource Locator}}
        >
        <ListBox x:Name="moviesListBox" ItemsSource="{Binding Movies}" SelectedItem="{Binding SelectedMovie, Mode=TwoWay}" />
        <ListBox x:Name="actorsListBox" ItemsSource="{Binding SelectedMovie.Actors}" SelectedItem="{Binding SelectedActor, Mode=TwoWay}" /> 
    </Window>
    
    public MovieViewModel : ViewModelBase
    {
        public ObservableCollection<IMovie> Movies { get; } = new ObservableCollection<IMovie>();
    
        public MovieViewModel()
        {
            foreach (var movie in blc.GetAllMovies())
                Movies.Add(movie);
        }
    
        private Movie _selectedMovie;
        public Movie SelectedMovie
        {
            get
            {
                return _selectedValue;
            }
            set
            {
                Set(ref _selectedValue, value);
            }
        }
    }
    
    public class ViewModelLocator
    {
        // Constructor to register ViewModels, etc...
        //
    
    
        public MovieViewModel MyViewModel => /* resolve the view model */
    }
    


0 commentaires

0
votes

Il n'y a pas de sélectionnéeMOVIE code> dans votre MédiopviewModel code>. Vous devez ajouter un et élever l'événement CODE> Propertychanged CODE> chaque fois que cela est défini comme suggéré par @c Robinson, ou vous pouvez vous attaquer directement à la propriété SELECTEYITEMEM code> de la liste FilmsListbox Code>:

<ListBox x:Name="actorsListBox" ItemsSource="{Binding SelectedItem.Actors, ElementName=actorsListBox}"
                                SelectedItem="{Binding SelectedActor, Mode=TwoWay}" />


0 commentaires

0
votes

Il n'y a pas de sélectionnexactor code> dans votre ViewModel code>.

ViewModel P>

public ObservableCollection<IMovie> Movies { get; set; } = new ObservableCollection<IMovie>();

private IMovie _selectedMovie
public IMovie SelectedMovie
{
   get => _selectedMovie;
   set
   {
      _selectedMovie = value;
      RaisePropertyChanged(nameof(SelectedMovie));
   }
}


0 commentaires