我目前正在尝试通过MvvmCross将两个图像绑定到iOS ImageView。 当ImageView处于“默认”状态时,应显示一个,当突出显示ImageView时,应显示另一个。
通过以下代码,我可以将Image绑定为默认状态。但是如何将“一个”加入“突出显示”状态呢?
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();
});
}
答案 0 :(得分:1)
另一种方法,如果您不需要图像加载,即许多静态UX。
您可以设置如下 -
_imageView = new UIImageView(UIImage.FromFile("some/image/off.png"))
{
HighlightedImage = UIImage.FromFile("some/image/on.png")
};
绑定它,例如&#34;已启用&#34;财产 -
this.DelayBind(() =>
{
var set = this.CreateBindingSet<SomeView, SomeViewModel>();
set.Bind(_imageView).For(v => v.Highlighted).To(vm => vm.Enabled);
set.Apply();
});
并且不要忘记在您的LinkerPleaseInclude.cs中添加突出显示。
希望这有帮助
答案 1 :(得分:0)
我认为最好的解决方案是引入额外的属性ImageUri
。在IsSelected
的设置器中,您将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);