Windows Phone 72012.02.21 15:26

윈폰에서는 초성검색을 기본적으로 지원하지 않는다. ㅠㅠ

그래서 할 수없이 만들어야 한다.

일단 초성 검색의 원리는 이렇다.

TextBox에 쓰여진글이 서울 이라면

일단 글자들을 하나하나씩 추출해내고 ‘서’,’울’  이렇게 이 글자들을 또 다시 초성,중성,종성으로 나눈다.

‘ㅅ’,’ㅓ’ 이런식으로

그러면 서울을 추출해냈으니 ‘ㅅ’,’ㅇ’ 이라는 2개의 char형 자료가 생긴다.

이것을 Itemsource Model에 저장한다.

그래서 텍스트박스에 입력된 첫글자가 ㅅ 이라면 저장해놓은 ㅅ ㅇ의 첫글자를 검색해서 보여주면 되는것이다.

두번째 글자가 ㅇ 이라면 이것도 역시 두번째 값을 검색해서 ㅇ 이라는 글자가 있는것을 보여준다.

단 두번째에서는 검색시 첫번째 검색결과에서 두번째값을 검색한다!

그리고 만약 초성 검색이 아닌 그냥 일반 서울로 검색할경우는 이것이 한글인지 아닌지를 판별하는 코드가 있는데 이것을 사용한다.

이코드는 한글을 초성,중성,종성으로 분리해 주는 class이다.

자세한 설명은 내가 샘플로 구현을 해 놓았다.


 

Posted by 동동(이재동)
TAG WP7, 검색, 초성
Windows Phone 72010.08.13 16:16

윈도우폰을 사용중에  전화가 오거나 빙검색을 하기 위해 서치 버튼을 눌렀다가 다시 원래 화면으로 돌아온다면?

모든 텍스트 박스나 바인딩이 초기 값으로 세팅해져있을것이다.

예를들면 랜덤넘버 프로그램에서 최소값 3과 최대값 300을 썻는데  빙검색을 누르거나 전화를 받았거나 문자를 받았다면

사용자는 자기가 하고 있던값이 사라지면 황당할것이다.

다행히 파일에 저장하는 IsolatedStorage가 있지만 우리는 영원히 저장하는것이 아니라 잠시 전화가 오기전의 상태를 저

장하기를 원한다.

우리가 그 상태정보를 영원히 가지고 있을 필요가 없다는것이다.

 

그렇다면 IsolatedStorage도 좋은 선택이 아니다.

 

PhoneApplicationService.Current.State

 

이걸 쓰면 어떨까? 이건 사용법은 isolatedStroage와 같지만 다른점은 어플이 종료가 될때는 사라진다는점이다.

즉 종료하지 않고 어떤 다른곳 으로 네비게이션을 하게 된다면 여기 데이터는 계속 살아있지만 종료를 하면 없어지기때문에 현재 상태를 파일에 쓰는것 보다 더 나은 성능 향상과 메모리 사용률 최적화를 기대할수 있다.

 

이걸 적용하기 위해서 네비게이션을 이동하기 전에 실행되는 함수와 이동이 되었을때 실행이 되는 함수에 넣으면 된다.

 

먼저 이동전에 현제 상태를 PhoneApplicationService.Current.State에 저장한다.

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
    RandomNumberStateData _randomNumberStateData = new RandomNumberStateData();
    _randomNumberStateData.TextBoxStart = StartNumberText.Text;
    _randomNumberStateData.TextBoxEnd = EndNumberText.Text;
    _randomNumberStateData.ButtonRandomNumber = button.Content.ToString();            
    
    if (PhoneApplicationService.Current.State.ContainsKey("RandomNumberState") == true)
    {
        PhoneApplicationService.Current.State.Remove("RandomNumberState");             
    }
 
    if (e.Content == null)
    {
        PhoneApplicationService.Current.State.Add("RandomNumberState", _randomNumberStateData);
    }
}

 

이렇게 저장을 하였으면  이제 볼일을 보고 다시 왔을때 이 상태 값들을 다시 원래 대로 복원을 해줘야 한다.

 

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
       {
           var dc = this.DataContext as RandomNumberViewModel;
           dc.ShakeSenserStart();
 
           if (PhoneApplicationService.Current.State.ContainsKey("RandomNumberState") == true)
           {
               var randomNumberStateData = PhoneApplicationService.Current.State["RandomNumberState"] as RandomNumberStateData;                
               dc.MinNumberValue = randomNumberStateData.TextBoxStart;
               dc.MaxNumberValue = randomNumberStateData.TextBoxEnd;
               dc.RandomNumberValue = randomNumberStateData.ButtonRandomNumber;
               //button.Content = randomNumberStateData.ButtonRandomNumber;                
           }
       }

 

큰 어려움은 없다 . 

참고 : http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/07/20/understanding-the-windows-phone-application-execution-model-tombstoning-launcher-and-more-part-3.aspx

Posted by 동동(이재동)