2017-06-27 16 views
0

私のアプリケーションの最後に更新するラベルのテキストを取得しようとしています。 Imメッセージセンターを使用してビューモデルまで通知を送信し、ビュー内のラベル上で更新する番号を増やします。 XamarinフォームとPCLを使用しています。 デバッグでログアウトする番号を取得できるので、メッセージセンターが機能していることがわかります。しかし、そのビューを更新していない。ラベルテキストがViewModel Xamarinフォームから更新されない

関連XAML:

<Label Text="{Binding counter}" 

      Grid.Row="0"/> 

背後にあるコード:

public partial class DriverDashboardView : ContentPage 
{ 
    private DriverDashboardViewModel driverdashboardviewmodel; 

    public DriverDashboardView() 
    { 

     InitializeComponent(); 

     this.Title = "Driver's Dashboard"; 
     BindingContext = driverdashboardviewmodel = new DriverDashboardViewModel(); 
     dataList.ItemTapped += DataList_ItemTapped; 


    } 

    private void DataList_ItemTapped(object sender, ItemTappedEventArgs e) 
    { 
     DisplayAlert("Route Information","Various Data","OK"); 
    } 

    protected async override void OnAppearing() 
    { 
     base.OnAppearing(); 
     await driverdashboardviewmodel.GetLabelInfo(); 
    } 

} 

ビューモデル:

public class DriverDashboardViewModel:BaseViewModel,INotifyPropertyChanged 
{ 

    private int messageCounter { get; set; } 
    public string counter { get { return messageCounter.ToString(); } 
         set { 
          if (Equals(value, messageCounter)) return; 
          messageCounter = Convert.ToInt32(value); 
          OnPropertyChanged(nameof(counter)); 

          } } 


    public DriverDashboardViewModel() 
    { 

     MessagingCenter.Subscribe<App>((App)Application.Current, "Increase", (variable) => { 

      messageCounter++; 
     }); 

    } 



    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, 
       new PropertyChangedEventArgs(propertyName)); 
    } 
} 

とメッセージセンターを実装し、関連セクション:

Foregroundmessages.cs:

MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Increase");

としては、メッセージングセンターが正常に動作述べました。これは、ビューモデルまでは取得しますが、カウンタ変数をビューに更新しません。私はint型と文字列としてカウンタを設定しようとしていますので、getとsetで変換します。 私もobservableコレクションを試みましたが、それはコレクションやリストではない単一の変数のために冗長に見えました。

アイデア?

答えて

2

あなたのコードは、プライベートmessageCounterプロパティを更新しています。公開するcounterのプロパティはバインドしていません。 messageCounterを更新してもPropertyChangedは発生しません。

MessagingCenter.Subscribe<App>((App)Application.Current, "Increase", (variable) => { 
    messageCounter++; 
}); 
+0

詳細を教えてください。 メッセージカウンターをインクリメントした後に、メッセージカウンターと同等のカウンターを設定するべきだと思いますか? – user3355961

+0

カウンターを直接増やしてみませんか?これは、必要以上に複雑になっています。 – Jason

+0

ok。これは、カウンターを取得して同じに設定していますか?それとも変わる必要がありますか? – user3355961

関連する問題