如何在MVVM跨iOS上使用InvertedVisibility绑定?

时间:2016-04-18 11:56:39

标签: c# ios xamarin mvvmcross

我正在努力实现:

我希望当Bytes为空时,即在我拍照之前,我的按钮才可见。

我尝试了以下内容:

set.Bind (btnTakePhoto).For("Visibility").To(x => x.Bytes).WithConversion("InvertedVisibility");

set.Bind (btnTakePhoto).For("InvertedVisibility").To(x => x.Bytes).WithConversion("InvertedVisibility");

set.Bind (btnTakePhoto).For("InvertedVisibility").To(x => x.Bytes).WithConversion("Visibility");

以及其他几种变体。

2 个答案:

答案 0 :(得分:2)

正确的方法是

set.Bind (btnTakePhoto)
.For("Visibility")
.To(x => x.Bytes)
.WithConversion("InvertedVisibility");

答案 1 :(得分:1)

值为null时,无法设置可见性。将它绑定到与Bytes关联的新布尔属性,并在Bytes的setter中调用OnPropertyChanged(nameof(IsTakePhotoVisible)),如下所示:

视图模型:

public bool IsTakePhotoVisible => Bytes != null;
public byte[] Bytes { 
    get {return bytes;} 
    set 
    { 
        SetValue(ref bytes, value);
        OnPropertyChanged(nameof(IsTakePhotoVisible)); 
    }
}

视图:

set.Bind (btnTakePhoto).For("Visibility").To(x => x.IsTakePhotoVisible).WithConversion("InvertedVisibility");

不要忘记从nuget添加Mvvmcross Visibility插件,否则它将无法正常工作......