2010-12-11 5 views
3

Windows Phone 7 용 Silverlight 툴킷에서 listpicker 컨트롤의 값/selecteditem을 설정하려고합니다 (사용자가 xml의 항목을 편집하려고 할 때 IO에서 데이터를 가져오고 텍스트 상자/목록 피커에 설정). 확실히 당신은 데이터를 설정할선택한 항목을 설정하는 방법

ListPickerSub.SelectedItem = sub; 

(하위 문자열입니다)하지만 그것은 System.InvalidOperationException

Additional information: SelectedItem must always be set to a valid value. 
+1

'하위'란 무엇입니까? 실제로 목록에 속해 있습니까? –

+0

예를 들어 xElement ("subElement")를 사용하고 있었다고 가정 할 때 저장소에있는 요소 중 하나의 값입니다. 데이터 바인딩을 설정하는 값입니다. sub는 subElement의 값과 동일한 값입니다. 월요일 을 일요일 Jamie

답변

3

SelectedItem에는 ListPickerItem (목록의 항목 중 하나임)이 필요합니다. 문자열을 전달하는 중입니다. 따라서 오류가 발생했습니다.

SelectedIndex을 쉽게 설정할 수 있습니다.

목록을 채우는 항목을 모른 채 SelectedItem을 설정하는 관련 예제를 제공하기는 어렵습니다.

편집 :
다음은 문자열에 바인딩 할 수있는 방법의 예입니다. 당신이 실제로 itemsource에 묶는 것의 실행 가능한 예제가 없다면 이것은 내가 할 수있는 최선책입니다. (그냥 객체 또는 부분적인 코드의 이름을 지정하는 것만으로는 충분하지 않습니다.)

은 가정 :

<Controls:ListPicker x:Name="ListPickerSub"> 
    <Controls:ListPicker.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" /> 
     </DataTemplate> 
    </Controls:ListPicker.ItemTemplate> 
    <Controls:ListPicker.FullModeItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding}" /> 
     </DataTemplate> 
    </Controls:ListPicker.FullModeItemTemplate> 
</Controls:ListPicker> 

가 그럼 난과 내용에 바인딩 할 수 있습니다 :

ListPickerSub.ItemsSource = SubItems(); 


private IEnumerable<string> SubItems() 
{ 
    yield return "monday"; 
    yield return "tuesday"; 
    yield return "wednesday"; 
    yield return "thursday"; 
    yield return "friday"; 
    yield return "saturday"; 
    yield return "sunday"; 
} 

을하고 SelectedItem로 설정 : 다음과 같은

ListPickerSub.SelectedItem = "sunday"; 
+0

이 같은 목록을 채우는 오전 : : '<툴킷 : ListPicker.ItemTemplate> 을 <나는 또한 정적 listpicker의 내용을 설정하여 (단지 테스트하기를) 시도 TextBlock Name = "{Binding subName}"Text = "{Binding subName}"여백 = "0"/> ' – Jamie

+0

@Jamie하지만 ItemSource로 무엇을 전달하고 있습니까? ? –

+0

하위 바인딩. 나는 object index = SubTxt를 사용하려고 시도했다.FindName (하위); 선택한 항목을 인덱스로 설정하지만 인덱스는 항상 null로 반환됩니다. – Jamie

0

을 던지고있다 :

내가 현재 사용하는 것을 시도하고있다 기본 데이터 소스에서 목록을 새로 고칩니다.

2

뭔가 :

ListPickerSub.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub); 

콘텐츠를 TextBlock에 캐스팅하고 그에 따라 코드를 변경해야 할 수 있습니다. 위의 경우 ListPicker가 ListPickerItem을 사용하여 동적으로 채워지는 경우에 해당합니다.

관련 문제