MVVM RaisePropertyChanged 抛出 InvalidCastException

MVVM RaisePropertyChanged throws InvalidCastException

我的 ViewModel 第一次打开时运行良好,第二次打开它时,尽管我的 "loaded" eventToCommand 似乎发生了一些问题。当我第二次打开它时,我在 RaisePropertyChanged 上收到此异常:

System.InvalidCastException: 'Unable to cast object of type 'UwpApp.ViewModel.QuizTeamViewModel' to type 'UwpApp.Model.Round'.'

这与加载的命令有关吗?

视图模型

public QuizTeamViewModel(INavigationService navigationService)
        {
            _navigationService = navigationService;

            MessengerInstance.Register<Quiz>(this, "SelectedQuiz", quiz => Quiz = quiz);

            SelectionChangedCommand = new RelayCommand<Round>(ChangeSelectedRound);
            ViewLoadedCommand = new RelayCommand(ViewLoaded);
            ClickRankingQuizTeamCommand = new RelayCommand(OnRankingQuizTeamClick);
        }

        private void ViewLoaded()
        {
            if (Quiz == null) return;
            Rounds = new ObservableCollection<Round>(Quiz.Rounds);
            RaisePropertyChanged("Rounds");

            FillQuizTeams();
        }

        private async void FillQuizTeams()
        {
            var quizTeamsToDisplay = new ObservableCollection<QuizTeamListViewModel>();
            foreach (var quizTeam in Quiz.QuizTeams)
            {
                var team = await ApiService<Team>.GetAsync($"{StaticUri.GetUri()}/teams/quizTeam/{quizTeam.Id}");
                quizTeam.Name = team.Name;
                quizTeamsToDisplay.Add(new QuizTeamListViewModel(quizTeam, this));
            }

            QuizTeams = quizTeamsToDisplay;
            RaisePropertyChanged("QuizTeams");
        }

Xaml

    <i:Interaction.Behaviors>
        <core:EventTriggerBehavior EventName="Loaded">
            <core:InvokeCommandAction Command="{Binding ViewLoadedCommand}" />
        </core:EventTriggerBehavior>
    </i:Interaction.Behaviors>

出于某种原因,我的组合框并不总是向我的命令发送 Round 对象,因此它试图将错误的对象转换为 Round。

我修复它的方法是将 SelectionChangedCommand 中的类型更改为对象,如果对象是 Round,则检查 RelayCommand 方法。