Xamarin.ios 如何将图像绑定到ImageView的HighlighteImage属性?
我目前正在尝试通过MvvmCross将两个图像绑定到iOS ImageView。 其中一个应在ImageView处于“默认”状态时显示,另一个应在ImageView高亮显示时显示 通过以下代码,我可以将图像绑定为默认状态。但是如何为“突出显示”状态绑定一个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
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。所以你没有绿色的复选标记…:)