【发布时间】: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