을 수정할 때 나는 모두 ItemsSource 및 selectedIndex의 속성이 내 뷰 모델에 바인딩 내 윈도우 폰 7 앱에서 ListPicker이 비어 간다. SelectedIndex는 양방향 바인딩을 사용하고 있습니다. 항목 및 SelectedIndex는 응용 프로그램 시작시 올바르게 채워집니다. 그러나, 내 ViewModel에서 SelectedIndex 속성을 수정할 때 ListPicker의 TextBox는 선택한 항목이없는 것처럼 비어있게됩니다. 전체 모드로 이동하여 목록에서 선택된 항목이 맞는지 확인하면 올바른 항목이 선택됩니다.데이터 바인딩 ListPicker의 selectedItem는 selectedIndex의
<toolkit:ListPicker Name="TheListPicker" ItemsSource="{Binding TheItems}" CacheMode="BitmapCache" FullModeHeader="{Binding Path=Resources.TheHeader, Source={StaticResource LocalizedStrings }}" SelectedIndex="{Binding TheCurrentIndex, Mode=TwoWay}" IsEnabled="{Binding IsViewEnabled}" TabIndex="0" >
<toolkit:ListPicker.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="{Binding Name}" FontFamily="{StaticResource PhoneFontFamilySemiBold}" FontSize="{StaticResource PhoneFontSizeMediumLarge}" />
</StackPanel>
</DataTemplate>
</toolkit:ListPicker.ItemTemplate>
<toolkit:ListPicker.FullModeItemTemplate>
<DataTemplate>
<StackPanel x:Name="item" Orientation="Horizontal" Margin="5, 24, 0, 24">
<TextBlock Margin="15, 0, 0, 0" Text="{Binding Name}" FontSize="40" TextWrapping="Wrap" />
</StackPanel>
</DataTemplate>
</toolkit:ListPicker.FullModeItemTemplate>
</toolkit:ListPicker>
이 내 뷰 모델의 단순화 된 버전입니다 : 여기
[DataMember]
public ObservableCollection<ItemEntity> TheItems
{
get
{
if (this.theItems == null)
{
this.theItems = new ObservableCollection<ItemEntity>();
}
return this.theItems;
}
set
{
this.theItems = value;
}
}
[DataMember]
public int TheCurrentIndex
{
get
{
return this.theCurrentIndex;
}
set
{
if (value != this.theCurrentIndex)
{
this.theCurrentIndex = value;
NotifyPropertyChanged("TheCurrentIndex");
NotifyPropertyChanged("IsSomeOtherPropertyEnabled");
}
}
}
그리고이 MainPage.xaml.cs를에서 관련 코드 (App_ViewModelChanged가있다가 여기
는 ListPicker의 XAML 코드 응용 프로그램 시작시 수행 된 비동기 작업이 완료되면 호출되는 이벤트 핸들러) :private void App_ViewModelChanged(object sender, ViewModelChangedEventArgs e)
{
BindToViewModel();
}
private void BindToViewModel()
{
this.DataContext = this.ViewModel;
this.ViewModel.IsViewEnabled = true;
}
private void SomeAsyncMethodCompleted(object sender, DetectCompletedEventArgs e)
{
if (e.Error == null)
{
this.ViewModel.TheCurrentIndex = e.Result;
}
}
이 문제는 항상 발생하지 않습니다. 시간의 50 %가 발생합니다. 응용 프로그램 수명에서 한 번만 발생하고 다시는 발생하지 않습니다. 또한 2011 년 2 월 Silverlight Control Toolkit 릴리스를 2011 년 8 월 릴리스로 전환했을 때 문제가 발생하기 시작했습니다. 전에는이 문제가 없었습니다.
이 것이 알려진 문제입니까?
대신 SelectedItem을 사용 하시겠습니까? –
SelectedItem을 사용할 때 이와 같은 문제가 해결 될 것이라는 희망으로 SelectedIndex를 사용하기 시작했습니다. 따라서 어느 것을 사용 하느냐가 중요하지 않습니다. –
일부 코드를 우리와 공유 할 수 있습니까? 아마도이 문제를 해결하는 데 도움이 될 수 있습니다. – BigL