2013-08-05 116 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; 
}