2016-12-08 22 views
0

タップした後に警告ボックスに表示するか、選択したListViewボックスをクリックしようとしています。現在selectedItemSelectedTicketに拘束されており、ViewModel内でオブジェクトコールSelectedTicketが発生します。 SelectedTicketがトリガーされると、DisplayAlert()メソッドを使用してpopup.show()メソッドを実行します。 DisplayAlert()メソッドは実行されますが、AlertBoxは表示されません。アラートボックスがxamarinフォームに表示されない、DisplayAlert()

Image

========================================= =====

//// XAMLページ

<ListView ItemsSource="{Binding TicketList,Mode=OneWay}" RowHeight="130" 
    ItemTemplate="{StaticResource TicketListTileTemplate}" BackgroundColor="#d9deeb" 
    SelectedItem="{Binding SelectedTicket, Mode=TwoWay}" SeparatorVisibility="None"> 
</ListView> 

============================ ======================

//// ViewModal

public object SelectedTicket 
{ 
    get 
    { 
     return _SelectedTicket; 
    } 
    set 
    { 
     if (SetProperty(ref _SelectedTicket, value)) 
     { 
      if ((value != null) && (value is TicketListItem)) 
      { 
       popup1.Show(); 
       SelectedTicket = null; 
      } 
     } 
    } 
} 

================================= =======

////Popup.cs

async public void Show() 
{ 
    DisplayAlert("Alert", "Your have been alerted", "OK"); 
} 

答えて

1

DisplayAlert()Pageオブジェクト(のようなContentPageまたはNavigationPagehereを参照してくださいにのみ利用可能です、あなたのPopup.csはないかもしれませんPageオブジェクトです。また、非同期メソッドで常にやりたいと思っているのはDisplayAlertです。最後に、Show()メソッドがUIスレッドで実行されていない可能性があります。

XAML:

<ListView ItemsSource="{Binding TicketList,Mode=OneWay}" 
      RowHeight="130" 
      ItemTemplate="{StaticResource TicketListTileTemplate}" BackgroundColor="#d9deeb" 
      SelectedItem="{Binding SelectedTicket, Mode=TwoWay}" 
      SeparatorVisibility="None" 
      ItemSelected="OnItemTapped"> <!-- Notice ItemTapped here will trigger when an item is tapped, imagine that --> 

で代わりにあなたのViewModelからアラートを表示しようとしているの

、なぜあなたは、このようなあなたのXAMLページのコードビハインドからの警告を表示しないでくださいコードビハインド:

3

DisplayAlertが表示されない最も一般的な理由の1つは、画面上でアクティブでないページで呼び出されているためです。これが動作する場合

迅速な回避策/テストとして、あなたは

await Application.Current.MainPage.DisplayAlert("Alert", "Your have been alerted", "OK"); 

を行うことができますが、私の最初の仮定が確認されました。

私はいつも自分のコードをきれいに保つようにしています。したがってViewModelからの呼び出しは確かに良いアプローチです。通常、MVVMライブラリには、表示アラートを支援するコードがいくつかあります。

関連する問題