2017-12-14 42 views
0

ItemsSource内の要素の数に基づいて、PickerであるXAMLを有効または無効にする必要があります。ItemSourceのXamarin結合数

<Picker 
    ItemsSource="{Binding WoSpesaDett.DsTecnico}" 
    ItemDisplayBinding="{Binding Valore}" 
    SelectedItem="{Binding WoSpesaDett.Tecnico}" 
    IsEnabled="{Binding ???}" 
    Grid.Row="0" Grid.Column="3"/> 

私はWoSpesaDett.DsTecnico.Count > 0を使用しようとしましたが、それは動作しますではありません。

どうすればこの問題を解決できますか?

ありがとうございました!

+0

[コンバーター](https://blog.xamarin.com/advanced-data-binding-for-ios-android-and-windows/)を試すことができます。 – testing

答えて

1

IValueConverter答えは指摘しています。

は、そうでない場合:理論的に

動的UIコントロールを隠したり表示は非常に簡単です。さて、問題は、あなたがMyPickerShouldBeVisibleに関連する変更についてのごViewを通知する必要があるということです

public bool MyPickerShouldBeVisible => WoSpesaDett.DsTecnico.Count > 0; 

:あなたがしなければならないのは、例えば次のようになりますあなたのモデルのbooleanプロパティを導入することです。私は通常、Fody.PropertyChangedを使用してINotifyPropertyChangeのものを処理しています。それを使用してDsTecnicoプロパティを特別な属性AlsoNotifyFor(nameof(MyPickerShouldBeVisible))でマークして、このソリューションを機能させることができます。ここで

は完全な例で、ViewModelにデータが簡略化されています

// INotifyPropertyChanged should be handled by `Fody.PropertyChanged` 
public class MyViewModel : INotifyPropertyChanged 
{ 
    public IList<string> MyData { get; set; } 
    [AlsoNotifyFor(nameof(MyPickerShouldBeVisible))] 
    public bool ShouldShowPicker => MyData.Any(); 
} 

は、上記の例を使用して、ピッカーの動的挙動になります。

0

あなたのバインディングコンテキストでブール値を作成することができ、次のいずれか

public bool PickerShouldBeEnabled 
{ 
    get { return WoSpesaDett.DsTecnico.Count > 0; } //returns true if there are more than 0 elements 
} 

以上の性能の使用LINQのために「どれを()」、リスト内どの要素がある場合uはちょうどたい、それを有効にした場合

public bool PickerShouldBeEnabled 
{ 
    get { return WoSpesaDett.DsTecnico.Any(); } //returns true if there are any elements 
} 

それとも、値としてリストを取り、真のリスト要素の数に基づいて返しIValueConverterを作成することができます。 私はあなたにこのような状況のための基本的なコンバータを与えることができます。

public class IntToBooleanConverter : IValueConverter 
{ 
    public object Convert (object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     int minimumLength = System.Convert.ToInt32 (parameter); 
     return (int)value >= minimumLength; 
    } 

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

注:

あなたは一度だけ(ない動的な方法で)あなたのピッカーの可視性を変更する必要がある場合は、その後、他のようなコンバータを作成するブール値の整数のため

関連する問題