Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 适用于Windows Phone 7&;的VS2010;将崩溃与Mvvm灯光混合_Silverlight_Visual Studio 2010_Expression Blend_Windows Phone 7_Mvvm Light - Fatal编程技术网

Silverlight 适用于Windows Phone 7&;的VS2010;将崩溃与Mvvm灯光混合

Silverlight 适用于Windows Phone 7&;的VS2010;将崩溃与Mvvm灯光混合,silverlight,visual-studio-2010,expression-blend,windows-phone-7,mvvm-light,Silverlight,Visual Studio 2010,Expression Blend,Windows Phone 7,Mvvm Light,这不是一个真正的问题,而是一个断言。发布此消息,以便其他人可以避免此问题 如果您使用Mvvm Light(可能还有其他Mvvm框架),并且ViewModel中的代码运行在UI线程以外的线程上,那么在设计模式下尝试查看/编辑XAML时,VS2010和Exression Blend可能会崩溃 例如,我有一个绑定到属性的复选框,该属性由在后台线程上更新的对象实现: <CheckBox Content="Switch 1" IsChecked="{Binding Switch

这不是一个真正的问题,而是一个断言。发布此消息,以便其他人可以避免此问题

如果您使用Mvvm Light(可能还有其他Mvvm框架),并且ViewModel中的代码运行在UI线程以外的线程上,那么在设计模式下尝试查看/编辑XAML时,VS2010和Exression Blend可能会崩溃

例如,我有一个绑定到属性的复选框,该属性由在后台线程上更新的对象实现:

<CheckBox Content="Switch 1" 
          IsChecked="{Binding Switch1.PowerState, Mode=TwoWay}"
          Height="72" HorizontalAlignment="Left" Margin="24,233,0,0" 
          Name="checkBox1" VerticalAlignment="Top" Width="428" />

这个给我修好了。希望它能帮助你。

你也可以用它代替计时器。您将失去一点准确性,但另一方面,回调将在UI线程上调用,这可能会防止崩溃(或不发生)。

Andreas:您当然是对的。但是,在此特定示例中使用System.Threading.Timer的目的是显式使用后台线程(此应用程序演示了如何在WP7应用程序中执行跨线程消息传递)。然后Dispatchermer将确实无法实现此目的。:)只是想一想:PowerState属性是否会在其值更改时引发PropertyChanged?是的(在模型和ViewModel中)。看看这个问题,我为什么要写这个示例的更多细节在哪里被公开了:我想知道PropertyChanged事件是否可以在UI线程之外引发(这可能会让您对所经历的崩溃有一些了解),但看看您的代码,情况并非如此。只是要明确一点:这与MVVM Light没有直接关系,而是VS10 designer和Blend在加载应用程序时运行代码。因为MVVM Light启用了可混合性(通过连接事物的方式),所以可能会发生这种情况。在这种情况下,可能需要将调试器附加到Expression Blend(甚至VS10设计器)以查找问题的原因。
    public OnOffSwitchClass()
    {
        if (IsInDesignMode)
        {
            // Code runs in Blend --> create design time data.
        }
        else
        {
            _timer = new System.Threading.Timer(TimerCB, this, TIMER_INTERVAL, TIMER_INTERVAL);
        }
    }