2016-10-21 15 views
1

Webからロードするデータを表示するXamarin.Formsアプリケーションにページがあります。ロードが行われている間にActivityIndicatorを表示し、データがロードされたときにリストビューを表示します。 XAMLでこれをやりたい私はこのような何かをやって推薦するXamarin.Forms(XAMLを使用)のときの表示切り替え

if(dataIsLoading) 
    <ActivityIndicator .../> 
else 
    <ListView ...>...</ListView> 
+1

各コントロールのIsVisibleプロパティをdataIsLoadingのVMプロパティにバインドできます。またはコード – Jason

答えて

3

私は何とかこのような何かを行うことができます。

のViewModel

IsBusyプロパティを作成します。

private bool _isBusy = false; 
public bool IsBusy 
{ 
    get { return _isBusy; } 
    set { _isBusy = value; OnPropertyChanged(nameof(IsBusy)); } 
} 

コンバータ

NotConverterを作成します。これは、ブール値を反転してXAMLで参照できる単なるものです。

public class NotConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
      return null; 

     var boolean = false; 

     if (Boolean.TryParse(value.ToString(), out boolean)) 
      return !boolean; 

     return value; 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 


} 

ビュー

リファレンスあなたのXAMLの上部にあるコンバータ。

xmlns:converter="clr-namespace:MobileApp.Converter" 

Pagesリソース辞書にリソースを宣言してください。

<ContentPage.Resources> 
    <ResourceDictionary> 
     <converter:NotConverter x:Key="NotConverter"/> 
    </ResourceDictionary> 
</ContentPage.Resources> 

次に、このプロパティをXAMLで使用します。

<Grid> 
    <ListView IsVisible="{Binding IsBusy, Converter={StaticResource NotConverter}}" /> 
    <ActivityIndicator IsRunning="{Binding IsBusy}" IsVisible="{Binding IsBusy}" /> 
</Grid> 
+0

でResourceDictionaryのリソースを宣言することを忘れないでください。 –

+0

oops、感謝@StephaneDelcroix、上記のリソースディクショナリの定義を追加しました。 –

関連する問題