Windows phone 7 MVVM-视图加载和事件处理

Windows phone 7 MVVM-视图加载和事件处理,windows-phone-7,event-handling,mvvm-light,Windows Phone 7,Event Handling,Mvvm Light,在我的windows phone应用程序中,我需要跟踪一些事件以获得良好的流量。但我不知道如何按顺序处理它们 启动应用程序时需要执行的操作: 加载主视图并实例化相应的视图模型 在视图模型的构造函数中,我启动了一个登录序列,该序列在使用eventhandler完成时发出信号 现在,当登录序列完成并且视图完全加载后,我需要启动另一个序列。 但问题是,这两个事件“完成”的顺序并不总是相同的。。。 我已经使用MVVMLight中的EventToCommand向视图模型发出了视图已“加载”的信号 关于

在我的windows phone应用程序中,我需要跟踪一些事件以获得良好的流量。但我不知道如何按顺序处理它们

启动应用程序时需要执行的操作:

  • 加载主视图并实例化相应的视图模型
  • 在视图模型的构造函数中,我启动了一个登录序列,该序列在使用eventhandler完成时发出信号
现在,当登录序列完成并且视图完全加载后,我需要启动另一个序列。 但问题是,这两个事件“完成”的顺序并不总是相同的。。。 我已经使用MVVMLight中的EventToCommand向视图模型发出了视图已“加载”的信号


关于如何同步的任何想法。

因为您不应该在UI线程上使用等待句柄或类似的东西。您必须使用视图模型中的标志来同步这两个方法,并在继续之前检查它们

因此,在视图模型中实现两个布尔属性。现在,当登录对话框完成时,将其中一个属性(我们称之为IsLoggedIn)设置为true,当初始化序列完成时,将另一个属性(IsInitialized如何)设置为true。现在的诀窍在于实现这两个属性的setter:

#region [IsInitialized]

public const string IsInitializedPropertyName = "IsInitialized";

private bool _isInitialized = false;

public bool IsInitialized {
    get {
        return _isInitialized;
    }
    set {
        if (_isInitialized == value)
            return;

        var oldValue = _isInitialized;
        _isInitialized = value;

        RaisePropertyChanged(IsInitializedPropertyName);

        InitializationComplete();
    }
}

#endregion

#region [IsLoggedIn]

public const string IsLoggedInPropertyName = "IsLoggedIn";

private bool _isLoggedIn = false;

public bool IsLoggedIn {
    get {
        return _isLoggedIn;
    }
    set {
        if (_isLoggedIn == value) 
            return;

        var oldValue = _isLoggedIn;
        _isLoggedIn = value;

        RaisePropertyChanged(IsLoggedInPropertyName);

        InitializationComplete();
    }
}

#endregion

public void InitializationComplete() {
    if (!(this.IsInitialized && this.IsLoggedIn))
        return;

    // put your code here
}
或者,您可以从设置器中删除
InitializationComplete
,并将
InitializationComplete
更改为:

public void InitializationComplete() {
    // put your code here
}
然后使用以下实现订阅“PropertyChanged”事件:

private void Class1_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) {
    if (e.PropertyName == IsInitializedPropertyName || e.PropertyName == IsLoggedInPropertyName) {
        if (this.IsInitialized && this.IsLoggedIn)
            InitializationComplete();
    }
}

奥巴利克斯:我要试试这个:)如果它有效,我会让你知道的!