2012-02-20 4 views
2

"확인"버튼이 있습니다. 클릭하면 콘텐츠가 '확인 중 ...'으로 변경되고 처리가 완료되면 '확인 됨'이 표시됩니다. 우리는 이것을 어떻게해야합니까? 나는 wpf에 처음이다. 어떤 도움을 주시면 감사하겠습니다.콘텐츠를 변경하고 클릭하면 원래 상태로 돌아 가기 버튼

private void btnVerify_Click(object sender, RoutedEventArgs e) 
{ 
    btnVerify.Content = new BitmapImage(new Uri("Verifying.png", UriKind.Relative)); 
    VerifyData(); // this takes almost few seconds to few minutes 
    btnVerify.Content = new BitmapImage(new Uri("Verified.png", UriKind.Relative)); 
} 
+1

당신이 전혀 아무것도 시도하고 만약 그렇다면 당신이 붙어 어디 있는지에 같은 코드를 제공 할 수 있나요 경우에? –

+0

개인 무효 btnVerify_Click (개체 발신자, RoutedEventArgs e) { btnVerify.Content = new BitmapImage (새 Uri ("Verifying.png", UriKind.Relative)); \t \t VerifyData(); // 몇 분에서 몇 분 정도 걸립니다. \t btnVerify.Content = new BitmapImage (새 Uri ("Verified.png", UriKind.Relative)); \t} – user1222006

+1

@ user1222006 - 다음 번에 질문에 코드를 게시하고 읽고 이해하기 쉽도록 코드 마크 업 (각 행의 시작 부분에 공백 4 개)을 사용하십시오. 감사. – IAmTimCorey

답변

0

WPF를 처음 사용하기 때문에 MVVM을 사용하고 있지 않다고 가정합니다. Click 이벤트 위에 및 방법에

후크 :

OnVerifyClick(object sender, RoutedEventArgs e) 
{ 
    Button verifyButton = sender as Button; 
    if(verifyButton == null) { return; } 

    verifyButton.Content = "Verifying..."; 
    DoProcessing(); 
    verifyButton.Content = "Verified";  
} 
+0

당신이 맞습니다, 나는 MVVM에 대해 확신하지 못하고 그것을 통과 할 것입니다. BTW, 아래 코드를 시도했지만 항상 확인 표시됩니다. private void btnVerify_Click (개체 보낸 사람, RoutedEventArgs) { btnVerify.Content = new BitmapImage (새 Uri ("Verifying.png", UriKind.Relative)); \t \t VerifyData(); \t btnVerify.Content = 새 BitmapImage (새 Uri ("Verified.png", UriKind.Relative)); \t} – user1222006

+0

'VerifyData()'코드가 너무 빨리 실행되기 때문일 수 있습니다.'VerifyData()'바로 뒤에'System.Threading.Thread.Sleep (3000); '을 넣어 문제인지 확인하십시오. –

0

여기서는 많은 작업이 없지만 귀하의 질문에 답변 해 드릴 수 있습니다. 보시다시피이 작업을 수행하는 몇 가지 간단한 방법이 있습니다.

먼저 버튼을 누르는 과정이 끝나면 버튼의 텍스트를 다시 "확인"으로 변경할 수 있습니다. 예 :

이 접근법의 문제점은 빠르고 빠르다는 것입니다. 코드를 통해 뷰 (사용자 인터페이스)를 직접 수정한다고 가정합니다. 또한 DoSomething 메서드가 뷰를 조작 할 수 있다고 가정합니다. 모범 사례는 아니지만 간단합니다.

또 다른 방법은 프로세스가 완료되었을 때 이벤트를 시작하는 것입니다. 폼 (또는 ViewModel)이 이벤트를 수신 한 다음 버튼의 텍스트 값을 다시 "Verify"로 변경할 수 있습니다. 이는 MVVM과 같은 것을 사용하고 ViewModel에서이 작업을 수행하는 경우 특히 자연에서 좀 더 우수 사례입니다. ViewModel에서 버튼의 텍스트를 가져올 수 있으므로 처음부터 마지막으로 변경할 수 있습니다.

편집 게시 한 업데이트 된 정보에서 화면을 새로 고치는 데 문제가있는 것처럼 보입니다. 이는 전체 프로세스가 완료 될 때까지 업데이트를 잠그는 동기 프로세스를 수행하고 있기 때문에 가능할 수 있습니다. 이 문제를 해결 얻을 수있는 한 가지 방법 (해킹) 여기에 나열된 지시에 따라하는 것입니다 : 나는 차라리 당신이 더 많은 스레드 친화적 인, 그러나 수 있도록이 코드를 리팩토링 볼 것이다

http://geekswithblogs.net/NewThingsILearned/archive/2008/08/25/refresh--update-wpf-controls.aspx

. 화면에 대기 표시기 (예 : "Validating ...")가 필요한만큼 프로세스가 오래 걸리는 경우 백그라운드 작업자 또는 다른 종류의 비동기 프로세스를 사용하여 실제 작업을 처리하여 UI가 잠기지 않습니다. 그러나 이것은 초보자로서 배우고 자하는 범위를 넘어서는 좀더 발전된 주제입니다. 그렇다면 지금 위 해킹을하거나 그냥 문제와 함께 살 것을 제안합니다.

+0

Biggs에 감사드립니다. 그러나 어떻게 든 이벤트 클릭에 대한 전체 프로세스가 완료되면 버튼 텍스트를 업데이트합니다. 내가 놓친 게 있니? – user1222006

+0

질문에 귀하가하고있는 것을 보여주는 몇 가지 코드를 게시 할 수 있습니까? 아마도 올바른 단계를 모두 수행하고있는 것 같지만 프로세스가 완료되기 전에 화면이 "확인 중 ..."이라고 말하기 위해 새로 고침되지 않고 다시 변경됩니다. 이는 동기식 프로세스를 수행 한 결과입니다. 이와 같은 것을 고치는 것은 좀 더 복잡 할 것입니다. – IAmTimCorey

+0

코드를 계속하기 전에 텍스트 변경을 처리하도록 응용 프로그램에 지시해야합니다. 예를 들어, 다음과 같이 호출 할 수 있습니다. System.Windows.Forms.Application.DoEvents –

관련 문제