ItemSource的Xamarin绑定计数

时间:2017-12-14 12:59:17

标签: c# xamarin xamarin.forms picker

我需要启用/禁用XAML,一个基于ItemsSource中元素数量的Picker。

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

我尝试使用WoSpesaDett.DsTecnico.Count > 0,但它不起作用。

我怎样才能做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:1)

IValueConverter for integer to bool:

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 :(得分:1)

注意:

如果您只需要更改Picker的可见性(不是以动态方式),那么创建一个转换器,就像指出其他答案一样。

,否则:

理论上,动态隐藏或显示UI控件非常简单。您所要做的就是在模型中引入一个布尔属性,例如:

$message[0]

现在问题是您需要通知public bool MyPickerShouldBeVisible => WoSpesaDett.DsTecnico.Count > 0; View相关的更改。我通常使用Fody.PropertyChanged来处理MyPickerShouldBeVisible内容。使用它,您可以使用特殊属性INotifyPropertyChange标记DsTecnico属性,以使此解决方案有效。

以下是一个完整的示例,简化了ViewModel数据:

AlsoNotifyFor(nameof(MyPickerShouldBeVisible))

使用上面的示例,将导致您选择器的动态行为。

答案 2 :(得分:0)

您可以在绑定上下文中创建一个bool:

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

或者为了更好的性能,使用linq“Any()”,如果你只想在列表中有任何元素的情况下启用它

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

或者您可以创建一个IValueConverter,它将列表作为值,并根据列表元素的计数返回true。 我也可以为你提供一个基本的转换器。