私の Android アプリには、検索結果が見つからない場合に表示したいメッセージがあります。これは、view-model の IsBusy プロパティが false で、HasResults プロパティが false の場合に発生します
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No results"
local:MvxBind="Visibility (IsBusy==false) && (HasResults==false),Converter=Visibility" />
可視性コンバーターは次のようになります。
public class VisibilityValueConverter : IMvxValueConverter
{
#region IMvxValueConverter implementation
object IMvxValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool)
{
return (bool)value == true ? (ViewStates)ViewStates.Visible : ViewStates.Gone;
}
else if (value is ViewStates)
{
return value;
}
else
{
return value != null ? (ViewStates)ViewStates.Visible : ViewStates.Gone;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
私が理解していないのは、VisibilityValueConverter が Android の ViewStates タイプの値を受け取る理由です。
そのため、ViewState タイプのテストを実装する必要がありました。そうしないと、それがないとバインディングが正しく機能しないことがわかりました。
コンバーターはブール値のみを受け取るべきではありませんか? 式 '(IsBusy==false) && (HasResults==false)' の結果ではないでしょうか?
多分私はここで何か間違ったことをしていますか?