视图加载和事件处理



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

应用启动时需要做什么:

  • 加载主视图并实例化相应的视图模型
  • 在视图模型的构造函数中,我启动了一个登录序列,该序列在完成时使用事件处理程序发出信号

现在,当登录序列已经完成,视图完全加载,我需要启动另一个序列。但问题是,这两个事件"完成"的顺序并不总是相同的……我使用了来自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();
    }
}

相关内容

  • 没有找到相关文章