2014-04-29 3 views
0

내 Windows Phone 앱에서 데이터 바인딩을 구현했는데 기대 한 결과가 나오지 않았습니다.데이터 바인딩이 예상 결과를 제공하지 않음 전화

내 기능은 데이터 바인딩 된 두 개의 텍스트 상자가있는 목록 상자입니다. 텍스트 상자를 클릭하면 datepicker/timepicker가 열리고 선택한 값이 텍스트 상자에 반영됩니다. "필드"로

private void LaunchDatePicker(TFDetails field) 
    { 
     datePicker = new CustomDatePicker 
     { 
      IsTabStop = false, 
      MaxHeight = 0, 
      Value = field.SelectedDate 
     }; 

     datePicker.DataContext = field; 
     datePicker.ValueChanged += DatePicker_ValueChanged; 
     LayoutRoot.Children.Add(datePicker); 
     datePicker.ClickDateTemplateButton(); 
    } 

을 다음과 같이 내가 날짜 선택기 및 timepicker를 시작하고있어

<TextBox Visibility="{Binding TBVisibility}" IsReadOnly="{Binding TBReadOnly}" InputScope="{Binding Numeric}" AcceptsReturn="{Binding MultiLine}" Width="{Binding TBWidth}" TextWrapping="Wrap" Text="{Binding Path=TBText, Mode=TwoWay}" GotFocus="TextBox_GotFocus_1" KeyUp="TextBox_KeyUp_1" LostFocus="TextBox_LostFocus_1" /> 
<TextBox Visibility="{Binding TB2Visibility}" IsReadOnly="True" Width="140" Text="{Binding TB2Text, Mode=TwoWay}" GotFocus="TextBox_GotFocus_2" /> 

을 다음과 같이

목록 상자의 데이터 템플릿의 XAML 코드는 목록 상자의 데이터 컨텍스트입니다 . 나는 그것의이 텍스트 상자에 반영되지 않은 시간을 변경하면

private void DatePicker_ValueChanged(object sender, DateTimeValueChangedEventArgs e) 
    { 
     DatePicker currentDP = sender as DatePicker; 
     TFDetails callingField = currentDP.DataContext as TFDetails; 
     if (callingField != null) 
     { 
      callingField.SelectedDate = currentDP.Value; 
      callingField.TBText = currentDP.ValueString; 
     } 
    } 

을 다음과 같이

의 valueChanged 이벤트입니다. 나는 또한 INotifyChangedProperty를 썼다.

enter image description hereenter image description here

나는 내가 할 수 여기서 뭘 할 수 있는지 실수 알 수 있습니다.

실제로 완벽하게 작동하는 비슷한 UI 페이지에서 동일한 코드가 있습니다. 내가 여기서 무슨 실수를하는지 모르겠다.

감사합니다.

답변

0

ListBox는 컬렉션 컨트롤입니다. 그것에 대한 DataTemplate이있는 경우 바인딩은 ListBox 전체의 DataContext가 아닌 DataSource로 ItemsSource에 컬렉션 boud의 단일 요소를 사용합니다.

+0

나는 정확하게 당신이 말하는 것을 이해하고 있지 않습니다. 제발 좀 더 명확 해 줄래? – Presse

+0

전체 ListBox 코드를 게시하고 바인딩 할 데이터 구조를 설명하십시오. – Pein

+0

시간을내어 주셔서 감사합니다. onNavigatedTo 이벤트에서 바인딩 클래스를 채 웠습니다. 따라서 날짜 표시기가 닫히면 OnNavigatedTo 이벤트가 호출되어 필드가 다시 채워집니다. 나는 그것에 대한 해결 방법을 발견했다. – Presse

관련 문제