【问题标题】:MVVM RaisePropertyChanged throws InvalidCastExceptionMVVM RaisePropertyChanged 抛出 InvalidCastException
【发布时间】:2020-04-18 18:33:18
【问题描述】:

我的 ViewModel 第一次打开时运行良好,但第二次打开时我的“已加载”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>

【问题讨论】:

  • 尝试先调试代码。您有错误消息,因此您可能知道它发生的行。问题不够具体,无法帮助您解决问题。尝试缩小范围。
  • 我确实调试了代码,但没有任何结果,由于某种原因,RaisePropertyChanged 似乎无法在视图加载函数中找到视图模型中的属性。
  • 你的意思是当你第二次触发ViewLoaded方法时,会出现错误?另外,我无法重现这个问题,能否提供一个简单的可以重现的样本供我们测试?
  • 您可能想要修改您的异常设置,以便调试器在此异常引发时停止(不仅在未发生异常时)。
  • 我不知道如何重现此问题,在 ViewLoaded 中,当我在没有参数的情况下调用 RaisePropertyChanged() 时似乎没有抛出异常。当我第二次加载 ViewModel 时,我的属性似乎真的有问题。 (不带参数的 RaisePropertyChanged 不会更新我的回合)

标签: c# .net mvvm uwp mvvm-light


【解决方案1】:

由于某种原因,我的组合框并不总是向我的命令发送 Round 对象,因此它试图将错误的对象投射到 Round。

我所做的修复它是将 SelectionChangedCommand 中的 Type 更改为 object 并检查 RelayCommand 方法是否该对象是 Round。

【讨论】:

  • 很高兴你知道了!请选择这个作为答案
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多