2012-07-04 5 views
0

나는 textBlock 컨트롤이 있고 특정 Message를 표시하기 위해 textBlock을 제어하는 ​​클래스에 전달하려고한다고 가정합니다.textBlock 컨트롤을 클래스로 전달하는 방법

1) 클래스에서 메서드를 호출 할 때 textBlock에 메시지를 표시해야합니다. 예 "연결 확인 중 ..."

2) 메서드가 필요한 작업을 완료하면 textBlock 표시가 축소됩니다. XAML에서

: 저는) TextBlock의 이름 = textBlockMsg b)는 버튼 클래스

전화 당신의 도움에 감사

있습니다.

- 업데이트 : 당신이 textBlockMsgXAML 당신에게 TextBox라는 이름의 경우 프로젝트

 

public class GeoCalculation 
{ 

    public GeoCalculation()  { } 


    public void CalculateDistance() 
    { 
     //- Begin -- want the textBlockMsg show : in progress...... 

     --code 

    //-- when end-----, textBlockMsg visibility becom collapse 


    } 

} 

답변

2

내부

이 클래스 파일이 //

편집 를 작동합니다 나는 그것을 수행하는 방법을 전체 INotifyPropertyChanged 확인을 구현하지 않습니다 : implement

public class CalculationClass : INotifyPropertyChanged  
{ 
     public void CalculateDistance() 
     { 
     TextToBeBound = "in progress..." 

     --code 

     VisibilityToBeBound = Collapsed; 

     } 
     public string TextToBeBound 
     { //... insert the implement of this property + NotifyPropertyChanged 
     get {...} 
     set {...} 
     } 

     public Visibility VisibilityToBeBound 
     { //... insert the implement of this property + NotifyPropertyChanged 
     get {...} 
     set {...} 
     } 

} 

그런 다음 XAML이 추가 :

<TextBlock x:Name="txtBlocMsg" Visibility={"Binding VisibilityToBeBound"} Text={Binding TextToBeBound"}/> 

CalculationClass

당신은 좋은해야 내 경우에는 (클래스에 UI의 DataContext을 설정하는 것을 잊지 마세요 가기. 이 모든 것이 새로운 것이라면. 데이터 바인딩 + MVVM 패턴에 대해 읽어 보시기 바랍니다.

모델/비즈니스 클래스에 UI 요소를 전달하는 것은 좋지 않습니다. MVVM 패턴을 사용해야합니다.

희망이 도움이됩니다.

+0

감사합니다. 이 클래스는 페이지 객체 내부에는 없습니다. 이 클래스는 클래스 파일로 프로젝트 내에 있습니다. – MilkBottle

+0

그런 다음 text 속성이있는 ViewModel을 사용해야합니다.이 속성을 textBlockMsg의 Text 속성에 바인딩합니다. 5 분 후에 내 업데이트 코드를 확인하십시오 :) – MBen

+0

정말 고마워요. – MilkBottle

0
  1. 당신은 TextBock 전달하는 매개 변수를 가질 수 있습니다

    공공 무효 CalculateDistance을 (있는 TextBlock TB) { tb.Text = "에서 진행 ..."

    --code

    tb.Visibility = 가시성.접힌; 은}

  2. 당신은

    공용 클래스 GeoCalculation { 민간있는 TextBlock _tb을 처리해야하는 TextBlock을 주입하는 클래스의 생성자를 사용 coud;

    public GeoCalculation(TextBlock tb) 
    { 
        _tb = tb; 
    } 
    
    public void CalculateDistance() 
    { 
        _tb.Text = "in progress..." 
    
        //code 
    
        _tb.Visibility = Visibility.Collapsed; 
    } 
    

    }

의 ViewModel 및 방법에 의해 더 나은 것 데이터 바인딩을 사용! 여기에 클래스 (메소드)를 사용하여 UI (텍스트 상자)의 텍스트를 프로비저닝 할 수 있습니다.

주의 : .net 방법이 있습니다. GeoCoordinate 클래스에는 두 개의 지리 포인트 간 거리를 계산하는 "GetDistanceTo"메소드가 있습니다. http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.getdistanceto.aspx을 참조하십시오.

+0

참조 링크를 제공해 주셔서 감사합니다. 사실, 저는 베어링과 다른 것들과 같은 거리를 계산하는 것 이상을하고 싶습니다. 한 가지 질문은 초당 32 프레임의 루프를 수행하면 메소드가 중단된다는 것입니다. 로직이 32fps 계산을 수행하면 textBlockMsg가 문제를 일으킬 것입니다. 감사합니다 – MilkBottle

+0

나는 32fps 계산으로 무슨 뜻인지 모르겠지만 timeconsuming 작업을 원한다면 백그라운드 스레드를 사용하여 UI를 차단하지 않으면 안됩니다. 스레드가 끝나면 텍스트 상자의 가시성을 변경할 수 있습니다. –

관련 문제