2013-08-05 61 views
1

我正在使用枚举状态在WPF MVVM中进行验证。验证是通过点击一个按钮触发的。 这是枚举和命令的代码:WPF MVVM更新状态,同时处理

public enum StatusTest {None, Ok, Error, Processing } 

public ICommand TestConnectionCommand 
{ 
    get 
    { 
     if (_testConnectionCommand == null) 
      _testConnectionCommand = new RelayCommand(
       () => this.Test()); 

     return _testConnectionCommand; 
    } 
} 
void Test() 
{ 
    Status = StatusTest.Processing; 
    if (ValidationMethod()) Status = StatusTest.Ok; 
    else Status = StatusTest.Error; 
} 

旁边的按钮,我有一个圆圈,与已经改变了个够与状态变化的枚举StatusTest链接。 目前它只显示最终状态(ok或错误),从不处理。如何在验证过程中通过颜色处理来填充圆圈?

+0

如果状态正在更新以显示正常或错误,那么很可能该进程正在快速完成,以至于它不显示处理。你可以延迟你的验证方法,看看会发生什么? – Orch

+0

我放了5秒延迟 System.Threading.Thread.Sleep –

回答

3

看起来你所有的工作都在UI线程上,所以Status的第一个setter不起作用。将您的代码更改为下面,让Test()在另一个线程上工作。

public enum StatusTest {None, Ok, Error, Processing } 

public ICommand TestConnectionCommand 
{ 
    get 
    { 
     if (_testConnectionCommand == null) 
      _testConnectionCommand = new RelayCommand(
       () => ThreadPool.QueueUserWorkItem(Test)); 

     return _testConnectionCommand; 
    } 
} 
void Test(object state) 
{ 
    Status = StatusTest.Processing; 
    if (ValidationMethod()) Status = StatusTest.Ok; 
    else Status = StatusTest.Error; 
}