Listview Xamarin表单访问XAML中的ViewModel属性
如何在XAML中访问ViewModel的属性 我试图仅在ListView选中某个项目时启用按钮。所选项目是绑定到my ViewModel中SelectedCar的数据。现在,我想检查SelectedCar是否为空,如果为空,则禁用按钮;否则,请启用它 我试过这样的东西Listview Xamarin表单访问XAML中的ViewModel属性,listview,xamarin.forms,selecteditem,Listview,Xamarin.forms,Selecteditem,如何在XAML中访问ViewModel的属性 我试图仅在ListView选中某个项目时启用按钮。所选项目是绑定到my ViewModel中SelectedCar的数据。现在,我想检查SelectedCar是否为空,如果为空,则禁用按钮;否则,请启用它 我试过这样的东西 <StackLayout Orientation="Vertical"> <ListView x:Name="lvwCars" ItemsSource="{Binding Cars}"
<StackLayout Orientation="Vertical">
<ListView x:Name="lvwCars" ItemsSource="{Binding Cars}"
SelectedItem="{Binding SelectedCar}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding PlateNumber}" />
<Label Text="{Binding OwnerName}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
<StackLayout Orientation="Horizontal">
<Button x:Name="btnBack"
Text="Back"
Command="{Binding BackClickCommand}"/>
<Button x:Name="btnNext"
Text="Next"
IsEnabled="False"
Command="{Binding ConfirmClickCommand}">
<Button.Triggers>
<DataTrigger TargetType="Button"
Binding="{Binding Source={x:Reference MyCarsViewModel}, Path=SelectedCarProperty}" Value="null">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Button.Triggers>
</Button>
</StackLayout>
您应该使用
转换器(实现IValueConverter的类),因为您有数据,但需要绑定到另一种格式的属性,您有一个对象可以有值(不同于null)或为null,因此,您需要实现如下转换器:
public class ObjectToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
xmlns:conv="clr-namespace:CarsMobile.Converters;assembly=CarsMobile"
然后,您可以在代码中使用该转换器:
<StackLayout Orientation="Horizontal">
<StackLayout.Resources>
<conv:ObjectToBoolConverter x:Key="Null2bool" />
</StackLayout.Resources>
<Button x:Name="btnBack"
Text="Back"
Command="{Binding BackClickCommand}"/>
<Button x:Name="btnNext"
Text="Next"
IsEnabled="{Binding SelectedCar,Converter={StaticResource Null2bool}}"
Command="{Binding ConfirmClickCommand}">
</Button>
</StackLayout>
例如,如果您的项目是CarsMobile,并且您有CarsMobile、CarsMobile.Droid和CarsMobile.iOS,
,并且您将转换器类放在名为Converters
(CarsMobile\Converters\ObjectToBoolConverter)的文件夹中,那么您的XMLN应该如下所示:
public class ObjectToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
xmlns:conv="clr-namespace:CarsMobile.Converters;assembly=CarsMobile"
参考
您是否尝试过“{Binding SelectedCar}”?它就在提供的代码中?在上面的Convert中,您是指值!=零对吗?没有输入。还有,你在StackLayout.Resources中添加的“conv”comming在哪里?哦,你说得对,对不起。我现在只有一个记事本:)conv:
是放置转换器的名称空间,需要导入才能在XAML中使用它。这将按照您的建议启用按钮,谢谢。但现在列表视图中的选择保持不变。如何清除该选项,使该按钮再次被禁用?谢天谢地,我还没想到最后一点,但是谢谢你的回答和大部分的帮助,耶稣!