xamarin - MVVMLight 绑定(bind)抛出 System.InvalidOperationException : Property not found

标签 xamarin xamarin.android mvvm-light

我在我的项目中使用了一些其他 MVVMLight 绑定(bind),它们工作没有问题,但现在我似乎无法超越这个。

在其 OnCreateView 上膨胀 Fragment 后,我保存了一堆我想要绑定(bind)的控件:一些是 LinearLayouts(我想根据虚拟机的属性),有些是我想要将字符串绑定(bind)到的 TextView。

在我寻找此问题的解决方案时,我偶然发现有人说,随着 OnCreateView 结束, View 可能不会膨胀,因此我对该控件的引用可能是错误/空/不正确。因此,我将 setBinding 表达式移至 OnActivityCreated 方法,至少“给它多一点时间”。另外,根据有人的建议,我的 View 都是 Fragment 中的公共(public)属性。

pluginCodeLayoutBinding = this.SetBinding(
() => ViewModel.CreateMode,
() => pluginCodeLayout.Visibility,
BindingMode.OneWay).ConvertSourceToTarget(Converters.BoolToVisibilityReverseConverter);

pluginCodeBinding = this.SetBinding(
() => ViewModel.Script,
() => pluginCode.Text,
BindingMode.OneWay);

这些绑定(bind)给出了以下异常(exception):

System.InvalidOperationException:未找到属性:可见性 System.InvalidOperationException:找不到属性:文本

但是当执行因异常而中断时,我可以检查 pluginCodeLayout 并看到它具有 Visibility 属性及其默认值。

如有任何帮助,我们将不胜感激。

提前致谢!

最佳答案

原始绑定(bind)不起作用的原因是pluginCode 是一个字段而不是属性。如果您查看 Mvvm Light 的 Flowers 示例,所有控件都具有类似的属性。

private TextView _pluginCode;
public TextView PluginCode
{
  get
  {
    return _pluginCode ?? (_pluginCode = View.FindViewById<TextView>(Resource.Id.plugin_code)); }
  }
}

如果您这样做,那么您可以像示例中那样使用绑定(bind)

this.SetBinding(() => ViewModel.Script, () => PluginCode.Text);

如果您不想拥有特性,那么您可以这样做

var pluginCode = View.FindViewById<TextView>(Resource.Id.plugin_code);
this.SetBinding(() => ViewModel.Script, pluginCode, () => pluginCode.Text);

关于xamarin - MVVMLight 绑定(bind)抛出 System.InvalidOperationException : Property not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29747313/

相关文章:

macos - 使用 xamarin 使用 Visual Studio 构建 ios 应用程序,无需 mac 构建主机

android - Xamarin.Forms 的带有 header 的 ListView (LongListSelector)

Xamarin.Forms 自定义 Android NavigationPageRenderer 标题和副标题

wpf - 为什么 MVVM Light 将系统程序集复制到应用程序文件夹?

.net - 在轮询提要的 mvvm 项目中放置计时器的位置

Android Styles.xml 找不到 TextView textColor 的@drawable 选择器

android - 是否可以在 monodroid 中使用 c# 图像库?

c# - 如何在 Xamarin 跨平台应用程序中自动从一个屏幕导航到另一个屏幕?

wpf - MVVM Light : how to send a parameter to ViewModel (when opening new window)?

Android (Xamarin) selectableItemBackground - SetBackgroundResource 不适用于 SetImageResource