これに似た状況がありますが、タッチしています。ただし、INotifyPropertyChanged を介してそれに対処しようとしています。
私のコードは次のとおりです。
set.Bind(txtSearch).For(x => x.Text).To(x => x.SearchText);
ここで、txtSearch は UISearchBar のカスタム ラッパーです。そのため、既にUIView (ラッパーはビュー)から継承しているため、 MvxNotifyPropertyChangedから継承することはできません。
テキスト プロパティは次のとおりです。
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 を使用するオブジェクトは処理できないということですか?
ありがとうございました!