我正在尝试将视图模型内部定义的变量传递给自定义转换器。
这是xaml文件:
<ContentPage.Resources>
<ResourceDictionary>
<converter:IsLastItemConverter x:Key="lastItemConverter" Collection="{Binding Selfies}" />
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
....
<local:Selfie IsLastItem="{Binding ID, Converter={StaticResource lastItemConverter}}" />
....
</ContentPage.Content>
这是xaml.cs背后的代码
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SelfieWall : BaseContentPage
{
public SelfieWall()
{
InitializeComponent();
this.BindingContext = new SelfieWallViewModel();
}
}
这是视图模型
public class SelfieWallViewModel : INotifyPropertyChanged
{
....
public List<Model.Selfie> Selfies { get; set; }
....
}
这是转换器
public class IsLastItemConverter : IValueConverter
{
public List<Selfie> Collection { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return true;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return true;
}
}
当我尝试加载上面xaml中定义的视图时,我得到了错误
System.NullReferenceException: Object reference not set to an instance of an object.
如果删除,错误将消失
Collection="{Binding Selfies}"
从XAML中删除。
有关如何将ViewModel的变量传递给转换器的任何提示。
2条答案
按热度按时间wgeznvg71#
如果我没理解错的话,你可能想知道你在
Selfies
中的项目是否是最后一个。我认为你不能用IValueConverter来做这件事。我建议你在Model.Selfie
中使用一个属性,每次你从集合中添加/删除一个项目时都要设置这个属性。k3fezbri2#
最新版本的Xamarin.Forms不支持转换器参数与ViewModel属性绑定。它只接受直接从UI/Xaml传递的值。
这里有一个解决方法。
使用它你可以在Xaml文件中创建一个对象,并传递Source和Property Name。GetValueFromPropertyType()然后将从Source.BindingContext中获取属性和它的值,因为Source的类型是XF. View。