2016-09-29 12 views
0

私は最近、プロジェクト用にXamarinフォームで作業していましたが、TableViewを使用してWeb APIから取得したレコードの詳細を表示しています。場合によっては特定の詳細が表示されない場合がありますので、情報を表示するセクションを非表示にしたい場合があります。XamarフォームでTableSectionをXAMLで非表示にするにはどうすればよいですか?

しかし、私はTableSectionを非表示にする方法を見つけることができません。

は、ここではいくつかのXAMLです:

<TableView> 
    <TableRoot> 

     ... 

     <!--Contact info--> 
     <TableSection IsVisible="{Binding HasContact}" Title="Contact"> 

      <!--Contact name--> 
      <TextCell Text="{Binding ContactName}" Detail="Primary contact" /> 

      <!--Phone--> 
      <TextCell Text="Phone" 
        Detail="{Binding FormattedContactPhoneNumber}" 
        Command="{Binding BindingContext.DialPhoneCommand, Source={x:Reference MainGrid}}" 
        CommandParameter="{Binding ContactPhoneNumber}"/> 


      <!--Email--> 
      <TextCell Text="Email" 
        Detail="{Binding ContactEmail}" 
        Command="{Binding BindingContext.SendEmailCommand, Source={x:Reference MainGrid}}" 
        CommandParameter="{Binding ContactEmail}"/> 

     </TableSection> 
    </TableRoot> 
</TableView> 

もちろん、のisVisibleプロパティが動作しませんでしたし、それが存在しないため、例外がスローされます(これは、ラベルのような他の要素上に存在しています)。私も無効なキャスト例外をスローするVisualElement.IsVisibleを使ってみました。だからこのセクションを隠す方法はありますか?

それを行う方法がない場合は、おそらく私は汚れた道を行くと、別TableViewsを使用する必要があります(あり、私はVisualElement.IsVisibleを使用することができます):(

+0

私は私が好きなだけxamarinで働いていない怖いが、それは一般的なXAML基準を運ぶ場合にはVisibility'プロパティは、あなたのブール値を置く 'だろうコンバータを介して、パラメタとして「可視」または「折りたたみ」のいずれかになります。すなわち、 'Visibility =" Collapsed "' –

+0

Xamarin Formsは独自のカスタムコントロールを使用していますが、Visibilityプロパティは使用できません。フォームは実行時にネイティブコントロールに変換されます。 – Eric

+0

本当ですか?まあそれは残念です。 MSがそれらを買って以来、彼らは長い標準的な慣習のいくつかを採用しようとするかもしれないかと思います。私は時間があるときには、ザマリンといっしょにしなければなりません。乾杯。 –

答えて

2

さてあなたがヒットしましたバインド可能なプロパティを使用して動的にセクションを非表示にすることができない、テーブルビューを使用しての欠点の1つ、私のプロジェクトで

私はそうのように、これを解決:。

私はViewModelにのOnPropertyChangesをリッスンページの背後にあるコードでは 必要なブール値が変更されると、I Remove the CellがそのBindingContextとして使用されます。 TableSectionではもはや必要ありません。 もう一度セルが必要になったら、もう一度挿入します。

したがって、すべてのセクションとセル、およびページの開始時に、名前を変更して、後で削除して追加するために参照する必要があるセルを保持します。

小さな例コード

private void OnViewmodelPropertyChanged (object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName.Equals("IsBioSecurityAvailable", StringComparison.OrdinalIgnoreCase)) 
    { 
     AdjustBioSecurityHeight(); 
    } 
} 

private void AdjustBioSecurityHeight() 
{ 
    if (!_viewmodel.IsBioSecurityAvailable && GeneralSection.Contains(BioSecurityViewCell)) 
     GeneralSection.Remove(BioSecurityViewCell); 
} 
+0

私はこれを答えにします。私は実際に私の意志にグリッドを曲げる道を行くつもりですが、これは技術的には答えです。 – Eric

+0

コントロールにビルドオプションがない – Depechie

関連する問題