我有类似的情况,但在联系中。尝试通过 INotifyPropertyChanged 处理这个问题。
我的代码如下:
set.Bind(txtSearch).For(x => x.Text).To(x => x.SearchText);
其中 txtSearch 是我对 UISearchBar 的自定义包装器。所以,我不能从MvxNotifyPropertyChanged继承,因为我已经从UIView继承(包装器是视图)。
文本属性是:
public string Text { get
{
return _search.Text;
} set
{
_search.Text = value;
RaisePropertyChanged(() => Text);
}
}
我在 SearchBar 文本更改时触发它(有效)。
我还添加了以下内容:
public event PropertyChangedEventHandler PropertyChanged;
protected IMvxMainThreadDispatcher Dispatcher
{
get { return MvxMainThreadDispatcher.Instance; }
}
protected void InvokeOnMainThread(Action action)
{
if (Dispatcher != null)
Dispatcher.RequestMainThreadAction(action);
}
protected void RaisePropertyChanged<T>(Expression<Func<T>> property)
{
var name = this.GetPropertyNameFromExpression(property);
RaisePropertyChanged(name);
}
protected void RaisePropertyChanged(string whichProperty)
{
var changedArgs = new PropertyChangedEventArgs(whichProperty);
RaisePropertyChanged(changedArgs);
}
protected void RaisePropertyChanged(PropertyChangedEventArgs changedArgs)
{
// check for subscription before going multithreaded
if (PropertyChanged == null)
return;
InvokeOnMainThread(
() =>
{
var handler = PropertyChanged;
if (handler != null)
handler(this, changedArgs);
});
}
但是当一切都到达 RaisePropertyChanged 时,我看到 PropertyChanged 是空的(因此,似乎没有为我的对象订阅任何代码)。当然,这不会进一步通知。
我有类似的情况,但有一些直接从 MvxNotifyPropertyChanged 继承的对象,这似乎工作正常。这是否意味着 MvvmCross 只能处理此类对象,但不能处理通常使用 INotifyPropertyChanged 的对象?
谢谢!