2016-10-07 32 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

私はlocalAcsの代わりListためObservableCollectionを使用しようとするだろう。 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() }); 
     } 
    } 
} 
関連する問題