C# DomainDataSourceView MoveCurrentTo。。。不断循环
什么时候 DomainDataSourceView.MoveCurrentToNext() 及 DomainDataSourceView.MoveCurrentToPrevious() 以非特定顺序调用多次DomainDataSourceView会陷入某种循环中,其中CurrentItem不断从集合更改为随机项。 停止的唯一方法是关闭Silverlight应用程序。 这是一个已知的问题吗 以下是silverlight mvvm应用程序中的调用顺序:C# DomainDataSourceView MoveCurrentTo。。。不断循环,c#,.net,silverlight,C#,.net,Silverlight,什么时候 DomainDataSourceView.MoveCurrentToNext() 及 DomainDataSourceView.MoveCurrentToPrevious() 以非特定顺序调用多次DomainDataSourceView会陷入某种循环中,其中CurrentItem不断从集合更改为随机项。 停止的唯一方法是关闭Silverlight应用程序。 这是一个已知的问题吗 以下是silverlight mvvm应用程序中的调用顺序: 按钮被点击 绑定到按钮的RelayComma
- 按钮被点击
- 绑定到按钮的RelayCommand触发canexecute方法(返回true)
- 执行该命令的方法并调用DataView.MoveCurrentToNext()
- 为第一个back调用RaiseCanExecuteChanged方法- next-last按钮命令(全部返回false)
- viewmodel上的CurrentEntity属性更改为当前属性 来自域数据源的项
- 为当前实体异步加载某些数据
有人知道如何解决这个问题,或者是什么原因导致了这个问题吗?很难说,因为我们没有任何正在发生的事件的源代码,但是如果你正在处理一个竞赛条件(看起来你可能会),你必须像处理任何其他竞赛条件一样处理它。也就是说,你必须阻止事情发生,以确保它不会被点击(例如,在事件链完成之前禁止点击按钮)。我不得不在Silverlight中经常这样做。这似乎是一个竞赛条件,事实上,不可能找到确切的问题,因为当我添加断点时它不会发生。当一个断点被点击时,Silverlight没有响应,所以我不能快速点击任何其他按钮。我不得不做的很多事情是在发生时连锁事件并禁用部分UX。然后,当链结束时,我再次启用了所有功能。这是因为Silverlight是完全异步的。嗯,我会看看它,并确保在它应该被禁用的时候所有东西都被禁用。你的评论让我看到了真正的问题,MoveCurrentTo。。。。方法都是异步的,当在毫秒内调用多个方法时,您无法确定哪一个将最后完成。其中一个调用位于另一个调用之前的if语句中,这导致它们几乎同时被调用。现在正在修复,看起来很有希望。