2017-12-14 3 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; 

: 당신이해야 할 모든 예를 들어 다음과 같아야 모델의 부울 속성을 소개하는 것입니다. 보통 Fody.PropertyChanged을 사용하여 INotifyPropertyChange 항목을 처리합니다. 이 솔루션을 사용하기 위해 DsTecnico 특성을 특수 특성 AlsoNotifyFor(nameof(MyPickerShouldBeVisible))으로 표시 할 수 있습니다.

이 여기에 전체 예입니다, 뷰 모델 데이터를 단순화 : 당신이 피커

// 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

참고 :

한 번만 (하지 동적 방식으로) 당신의 선택 도구의 가시성을 변경해야하는 경우는 다음처럼 다른 컨버터를 만들 부울 정수에 대한

관련 문제