如何在tableViewCell中动态隐藏图像?

时间:2015-07-29 15:37:20

标签: ios xamarin mvvmcross

我有一个绑定到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();
}

如何应用可见性转换绑定来动态隐藏或显示单元格中的图像?

2 个答案:

答案 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();
    });