2016-10-07 6 views
0

내 Xamarin Forms 앱의 코드입니다. xaml ListView에 Activities List of DetaledActivity이 채워 져야합니다.이 목록은 이전 페이지에서 채워집니다. 코드를 단계별로 실행하고 디버그 할 때 _activities에는 많은 항목이 있지만 xaml 페이지에는 표시되지 않습니다.ListView 소스가 NavigationParameters에서 업데이트되지 않습니다.

이 페이지의 생성자 항목으로 목록을 채우면 해당 셀을 클릭 할 수 있지만 텍스트는 표시되지 않습니다.

public class DetailedActivityPageViewModel : _ViewModelBase 
{ 
    INavigationService _navigationService; 
    public DetailedActivityPageViewModel(INavigationService navigationService) 
    { 
     _navigationService = navigationService; 
    } 

    public override void OnNavigatedTo(NavigationParameters parameters) 
    { 
     base.OnNavigatedTo(parameters); 
     if (parameters.ContainsKey("properties")) 
     { 
      var localAcs = new List<DetailedActivity>(); 
      var properties = (Dictionary<string, object>)parameters["properties"]; 
      foreach (var prop in properties) 
      { 
       if (prop.Value != null) 
        localAcs.Add(new DetailedActivity { Key = prop.Key.ToString(), Value = prop.Value.ToString() }); 
      } 
      _activities = localAcs; 
     } 
    } 

    private IEnumerable<DetailedActivity> _activities; 
    public IEnumerable<DetailedActivity> Activities { get { return _activities; } set { SetProperty(ref _activities, value, "Activities"); } } 
} 


public class DetailedActivity 
{ 
    public string Key; 
    public string Value; 
} 

<ListView ItemsSource="{Binding Activities}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <StackLayout Orientation="Horizontal"> 
        <Label Text="{Binding Key}" /> 
        <Label Text="{Binding Value}" /> 
       </StackLayout> 
      </ViewCell> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

답변

0

나는 List 대신 ObservableCollectionlocalAcs 위해를 사용하려고 할 것입니다. ObservableCollection을 사용하면 ObservableCollection에서 요소를 추가하거나 제거 할 때 바인딩을 업데이트해야합니다. 요소를 추가하기 전에 을 'localAcs'로 설정해야 할 수 있습니다 (예 :

public override void OnNavigatedTo(NavigationParameters parameters) 
{ 
    base.OnNavigatedTo(parameters); 
    if (parameters.ContainsKey("properties")) 
    { 
     var localAcs = new List<DetailedActivity>(); 
     _activities = localAcs; 
     var properties = (Dictionary<string, object>)parameters["properties"]; 
     foreach (var prop in properties) 
     { 
      if (prop.Value != null) 
       localAcs.Add(new DetailedActivity { Key = prop.Key.ToString(), Value = prop.Value.ToString() }); 
     } 
    } 
} 
).
관련 문제