2012-01-15 3 views
2

기본 검색 텍스트 상자 -> 버튼을 구현하고 있지만 사용자가 EnterMovie 키의 Enter/Return 키를 누를 수있게하려고합니다. keyboard/pad, as How to enable enter button on keyboard on wp7?ViewModel의 RelayCommand : 호출이 ViewModel의 바운드 UI 데이터에 액세스하지 못합니다.

RelayCommand가 호출되면 검색 텍스트 상자의 내용에 대해 null 값을 얻습니다.

MVVM Light를 사용하고 있습니다.

내가 속성을 가진 뷰 모델에 바인딩하여 PhoneApplicationPage 있습니다

public class MainViewModel : ViewModelBase 

{ 

private string _searchString; 

public RelayCommand Search { get; private set; } 
public RelayCommand<KeyEventArgs> SearchTextBoxKeyDown { get; private set; } 

public string SearchString 
{ 
    get { return _searchString; } 
    set 
    { 
     if (_searchString != value) 
     { 
      _searchString = value; 
      RaisePropertyChanged("SearchString"); 
     } 
    } 
} 

public MainViewModel() 
{ 
    if (IsInDesignMode) 
    { 
     // Code runs in Blend --> create design time data. 
    } 
    else 
    { 
     // Code runs "for real" 
     SearchTextBoxKeyDown=new RelayCommand<KeyEventArgs>((e)=> 
     { 
      if (e.Key == Key.Enter) 
      { 
       // SearchString is empty here? 
       Search.Execute(null); 
      } 
     }); 
     Search = new RelayCommand(() => 
     { // invokes Search with SearchString 

     }, 
     () => 
     { 
      bool isEnabled = true; 
      if (string.IsNullOrWhiteSpace(SearchString)) isEnabled = false; 
      return isEnabled; 
     }); 
    } 
} 

보기는 자동 완성 컨트롤에서 KeyDown 방법을 호출 할 MVVM 라이트 툴킷을 사용하여을 (그것은 Telerik 컨트롤이지만, 이 텍스트 상자처럼 보이는) 텍스트 상자 냄새 : 나는 텍스트 상자가 바인딩 무엇입니까에서 SearchString, 액세스 할 때

호출 된 코드에서
   <telerikInput:RadAutoCompleteBox 
        InputScope="Search" 
        Text="{Binding SearchString,Mode=TwoWay}" 
        SuggestionsSource="{Binding MruSearchStrings}"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="KeyDown"> 
          <cmd:EventToCommand x:Name="searchStringTextBoxKeyDown" Command="{Binding SearchTextBoxKeyDown, Mode=OneWay}" PassEventArgsToCommand="True"> 
          </cmd:EventToCommand> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </telerikInput:RadAutoCompleteBox> 

, 난 그냥 널 얻을 - 난에 텍스트를 입력 한 경우에도이 그것. SearchTextBox가 ViewModel에 대한 데이터를 다시 보내 이벤트 코드에서 픽업하지 않은 것과 거의 같습니다.

내가 뭘 잘못하고 있니?

답변

2

Enter를 누르면 여전히 TextBox에 포커스가 있기 때문에 ViewModel이 TextBox 값으로 업데이트되지 않습니다. 기본적으로 TextBox 컨트롤을 종료하면 ViewModel이 업데이트됩니다. 그러나 사용자 지정 동작을 사용하여이 상황을 변경할 수 있습니다. 이 하나의 작품은 나를 위해 처럼 매력 : http://zoltanarvai.com/2009/07/22/binding-update-on-textbox-textchanged-event-using-behaviors/

+0

우수. 고마워. XAML을 조금 더 배웠습니다. –

관련 문제