【问题标题】:Mvvmlight and Xamarin Unified API: Property not foundMvvmlight 和 Xamarin 统一 API:找不到属性
【发布时间】:2015-01-29 08:31:37
【问题描述】:

我在这里尝试使用 Laurent 提供的 iOS 上统一 API 的 dll:

http://blog.galasoft.ch/posts/2015/01/porting-mvvmlight-to-the-xamarin-ios-unified-api-64-bits/#respond

还有一些问题。我不知道这是否是一个新错误,或者我做错了什么。

1) 我尝试将 ViewModel 的属性绑定到 UI 的属性:

_binding = this.SetBinding(() => ViewModel.IsLoading, () => _myView.IsLoading);

myViewViewController.View 的自定义子视图。

但在运行应用程序时,我收到以下错误:

System.InvalidOperationException: Property not found: IsLoading

2)由于第一个sn-p不起作用,我尝试了以下

_binding = this.SetBinding(() => ViewModel.IsLoading).WhenSourceChanges(
 () => _myView.IsLoading = ViewModel.IsLoading);

它工作正常。但是,当我对 List<T> 的属性执行类似操作时,我会收到很多 WhenSourceChanges 事件,并且 UI 会更新太多次。这不是很理想。

如果我正在从我的 ViewModel 收听 PropertyChanged 事件,我只会得到列表的一次更新。因此,WM 似乎没有问题。

【问题讨论】:

  • 此错误表示无法通过 _myView 上的反射找到 IsLoading 属性。我怀疑这与 _myView 元素的可见性有关。你能告诉我你是如何声明这个元素的,我会尝试重现。
  • 没什么复杂的:private bool _isLoading; public bool IsLoading { get { return _isLoading; } set { _isLoading = value; } } 我也尝试过使用受保护的或自动的 getter/setter。还是一样的例外。
  • 我也尝试更改 _myView 属性的可见性(公共/受保护,...),但仍然有异常
  • 好的,感谢您的更新。我会尝试重现。
  • 顺便说一句,WhenSourceChanges 调用过多的问题应在最新版本 (V5.1) 中修复

标签: c# ios xamarin.ios xamarin mvvm-light


【解决方案1】:

据我所知,这是一个反射问题。将字段 _myView 更改为属性应该可以解决此问题。例如:

private UIView MyView {
    get {
        return _myView;
    }
}

然后像这样绑定:

_binding = this.SetBinding(() => ViewModel.IsLoading, () => MyView.IsLoading);

您也可以使用不使用表达式的扩展方法之一来创建绑定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2018-04-09
    • 2019-05-31
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多