我有一个绑定到ViewModel中的源的tableView,以及我希望基于ViewModel中的属性隐藏或显示单元格的图像。
我听说我可以使用可见性转换器,但我不知道它是如何工作的。
我有一个源的事件列表,我在源上也有一个CurrentEvent属性。如果用于单元格的事件对于CurrentEvent是相同的,我想显示图像。
(我希望我能正确绑定tableView ...对Xamarin和MVVMCross来说是全新的)
public override void ViewDidLoad()
{
base.ViewDidLoad();
var source = new MvxStandardTableViewSource (TableView, "TextLabel EventName;");
TableView.Source = source;
var set = this.CreateBindingSet<SelectEventViewController, EventsViewModel> ();
set.Bind(source).To(vm => vm.Events);
set.Apply();
this.CreateBinding(source).For(s => s.SelectionChangedCommand).To<EventsListingViewModel>(vm => vm.SelectEvent(vm.Events[TableView.IndexPathForSelectedRow.Row])).Apply();
// hide "SuccessImage" if not same event... how to apply bidning?
// .Bind(field)
// .For("Visibility")
// .To(vm => vm.VMProperty)
// .WithConversion("Visibility");
TableView.ReloadData();
}
如何应用可见性转换绑定来动态隐藏或显示单元格中的图像?
答案 0 :(得分:0)
您在问题中引用的值转换器是mvvmcross插件。您可以将其安装为NuGet package。
MvvmCross value converters wiki page有关于使用该插件的更多信息。
答案 1 :(得分:0)
您需要在单元级别执行此操作。这是我做的一个例子:
this.DelayBind(() =>
{
var set = this.CreateBindingSet<MyPlayersCell, PlayerViewModelWrapper>();
set.Bind(_rowId).To(vm => vm.RowItem.RowId);
set.Bind(_teamLogo).To(vm => vm.RowItem.Team.TeamId).WithConversion("TeamLogoImage");
set.Bind(_teamLogo).For("Visibility").To(vm => vm.RowItem.CanDisplayLogo).WithConversion("Visibility");
set.Bind(_teamCode).To(vm => vm.RowItem.Team.TeamCode);
set.Bind(_playerName).For(l => l.Text).SourceDescribed("IsCaptain(RowItem.PlayerName, RowItem.IsCaptain)");
set.Apply();
});