我需要启用/禁用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
,但它不起作用。
我怎样才能做到这一点?
谢谢!
答案 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。 我也可以为你提供一个基本的转换器。