2012-02-17 2 views
0

http://mobileworld.appamundi.com/blogs/andywigley/archive/2012/02/02/how-to-databind-selecteditems-of-the-listpicker-and-recurringdayspicker.aspx의 지침에 따라 다중 선택 ListPicker에서 SelectedItems를 바인딩합니다.ListSicker는 ItemsSource가 서비스에서 가져온 데이터에 바인드 될 때 선택된 항목을 체크하지 않습니다

ViewModel에서 만든 개체의 ObservableCollection에 ItemsSource를 바인딩하면 ListPicker가 문제없이 작동합니다. 그러나 WCF 서비스에서 가져온 ObservableCollection에 ItemsSource를 바인딩하면 문제가 발생합니다. ListPicker는 모든 항목을 올바르게 표시하며, 기본 화면에서 선택한 항목으로 선택하여 표시 할 수도 있습니다. 그러나 다시 선택하기 위해 선택 도구를 클릭하면 ListPicker는 템플릿에서 선택된 항목을 '틱'할 수 없습니다.

서비스에서 가져온 모든 요소의 목록을 다시 작성할 수 있지만 문제를 해결할 수있는 깔끔한 방법이 있는지 궁금합니다.

프로젝트 정보 : WP 7.0, WCF 서비스, EntityFramework, 커피를 많이

엔티티 클래스 :

DataContract(IsReference=true)] 
public class TypeOfDish 
{ 
    [DataMember] 
    public int TypeOfDishID { get; set; } 
    [DataMember] 
    public string NameToDisplay { get; set; } 
} 

WCF 서비스 :

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    [ApplyDataContractResolver] 
    IEnumerable<TypeOfDish> GetDishTypes(); 
} 

XAML :

<StackPanel x:Name="DishTypeGroup" Orientation="Vertical" Width="400"> 
    <helpers:ListPickerExtended x:Name="TypeOfDishPicker" > 
     ItemsSource="{Binding DishTypeList}" 
     SelectionMode="Multiple" 
     SelectedItems="{Binding SelectedDishTypes, Mode=TwoWay}" 
     Margin="8,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Center"> 

     <toolkit:ListPicker.FullModeItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Path=NameToDisplay}" /> 
      </DataTemplate> 
     </toolkit:ListPicker.FullModeItemTemplate> 
    </helpers:ListPickerExtended> 
</StackPanel> 

ListPick erExtended.cs

public class ListPickerExtended : ListPicker 
{ 
    public new IList SelectedItems 
    { 
     get 
     { 
      return (IList)GetValue(SelectedItemsProperty); 
     } 
     set 
     { 
      base.SetValue(SelectedItemsProperty, value); 
     } 
    } 
} 

뷰 모델은

public ObservableCollection<TypeOfDish> DishTypeList 
{ 
    get 
    { 
     //myModel.DichTypes is loaded with data from calling 
     //GetDishTypesAsync() on my service client 
     return myModel.DishTypes; 
    } 
} 

ObservableCollection<object> _selectedDishes = new ObservableCollection<object>(); 

public ObservableCollection<object> SelectedDishTypes 
{ 
    get { return _selectedDishes; } 
    set 
    { 
     if (_selectedDishes == value) { return; } 
     _selectedDishes = value; 
     RaisePropertyChanged("SelectedDishTypes"); 
    } 
} 
+2

이상하게 들리므로 일부 코드가 없으면 알 수 없습니다. –

+0

일부 코드가 추가되었습니다. 누군가가 무엇이 잘못되었는지 파악할 수 있기를 바랍니다. – anetafr

답변

0

난 그냥 해결책을 찾았습니다.

페이지가로드 될 때마다 서비스에서 데이터를 가져 왔습니다. ListPicker의 전체 모드 템플릿에서 돌아 왔을 때 주 페이지가 새로로드 된 DishTypesList 속성을 다시 설정하여 다시로드되었습니다. ListPicker.SelectedItems가 설정되어 있지만 새 개체가 개체와 일치하지 않습니다.

데이터를 View Model 생성자로 옮기고 ListPicker가 올바르게 작동하기 시작했습니다.