Xamarin.ios 如何将图像绑定到ImageView的HighlighteImage属性?

Xamarin.ios 如何将图像绑定到ImageView的HighlighteImage属性?,xamarin.ios,mvvmcross,Xamarin.ios,Mvvmcross,我目前正在尝试通过MvvmCross将两个图像绑定到iOS ImageView。 其中一个应在ImageView处于“默认”状态时显示,另一个应在ImageView高亮显示时显示 通过以下代码,我可以将图像绑定为默认状态。但是如何为“突出显示”状态绑定一个 public CategoryCell(IntPtr handle): base(string.Empty, handle) { _imageViewLoader = new MvxImageViewLoader(() => t

我目前正在尝试通过MvvmCross将两个图像绑定到iOS ImageView。 其中一个应在ImageView处于“默认”状态时显示,另一个应在ImageView高亮显示时显示

通过以下代码,我可以将图像绑定为默认状态。但是如何为“突出显示”状态绑定一个

public CategoryCell(IntPtr handle): base(string.Empty, handle)
{
    _imageViewLoader = new MvxImageViewLoader(() => this.imageView);
    this.DelayBind(() =>
    {
        var set = this.CreateBindingSet<CategoryCell, MaterialCategory>();
        set.Bind(titleLabel).To(materialCategory => materialCategory.Label);
        set.Bind(_imageViewLoader).To(materialCategory => materialCategory.ImageActiveUri);
        set.Bind(this).For(cell => cell.Selected).To(materialCategory => materialCategory.IsSelected);
        set.Apply();
    });
}
public CategoryCell(IntPtr句柄):base(string.Empty,句柄)
{
_imageViewLoader=new MvxImageViewLoader(()=>this.imageView);
这个.DelayBind(()=>
{
var set=this.CreateBindingSet();
set.Bind(titleLabel).To(materialCategory=>materialCategory.Label);
set.Bind(_imageViewLoader).To(materialCategory=>materialCategory.ImageActiveUri);
set.Bind(this).For(cell=>cell.Selected).To(materialCategory=>materialCategory.IsSelected);
set.Apply();
});
}

我认为最好的解决方案是引入一个额外的属性
ImageUri
。在
IsSelected
的setter中,根据选择状态设置
ImageUri

视图模型:

public class MaterialCategory : MvxViewModel
{
    //...
    public string ImageActiveUri { ... } // call UpdateImageUri() here, too
    public string ImageInactiveUri { ... } // call UpdateImageUri() here, too
    public string ImageUri { ... }
    public bool IsSelected 
    {
        get { return _isSelected; }
        set 
        {
            _isSelected = value;
            UpdateImageUri();
            RaisePropertyChanged(() => IsSelected);
        }
    }   

    private void UpdateImageUri() 
            {
        ImageUri = IsSelected ? ImageActiveUri : ImageInactiveUri;
    }
}
set.Bind(_imageViewLoader).To(materialCategory => materialCategory.ImageUri);
// instead of:
// set.Bind(_imageViewLoader).To(materialCategory => materialCategory.ImageActiveUri);
绑定:

public class MaterialCategory : MvxViewModel
{
    //...
    public string ImageActiveUri { ... } // call UpdateImageUri() here, too
    public string ImageInactiveUri { ... } // call UpdateImageUri() here, too
    public string ImageUri { ... }
    public bool IsSelected 
    {
        get { return _isSelected; }
        set 
        {
            _isSelected = value;
            UpdateImageUri();
            RaisePropertyChanged(() => IsSelected);
        }
    }   

    private void UpdateImageUri() 
            {
        ImageUri = IsSelected ? ImageActiveUri : ImageInactiveUri;
    }
}
set.Bind(_imageViewLoader).To(materialCategory => materialCategory.ImageUri);
// instead of:
// set.Bind(_imageViewLoader).To(materialCategory => materialCategory.ImageActiveUri);

另一种方法是,如果您不需要图像加载,即大量静态用户体验

您可以按以下方式设置:

_imageView = new UIImageView(UIImage.FromFile("some/image/off.png"))
        {
            HighlightedImage = UIImage.FromFile("some/image/on.png")
        };
并将其绑定,例如“已启用”属性-

this.DelayBind(() =>
        {
            var set = this.CreateBindingSet<SomeView, SomeViewModel>();

            set.Bind(_imageView).For(v => v.Highlighted).To(vm => vm.Enabled);

            set.Apply();
        });
this.DelayBind(()=>
{
var set=this.CreateBindingSet();
set.Bind(_imageView).For(v=>v.Highlighted).To(vm=>vm.Enabled);
set.Apply();
});
别忘了将高亮显示添加到LinkerPleaseInclude.cs


希望这有帮助

我们的解决方案略有不同,但这似乎是更好的解决方案。丹克!嗯,这并不是解决我当时问题的办法。我想将HighlighteImage绑定到我的ViewModel。所以你没有绿色的复选标记…:)