あなたの質問を読んで、あなたが言っていることは、ビュー自体が文字列型のフィールドを持っているということだと思います...
あなたのコード:
this.AddBindings(
new Dictionary<object, string>()
{
{ StringTemp, "{'Text':{'Path':'AboutText'}}" },
});
Text
が参照するオブジェクトのプロパティを、ViewModelにあるStringTemp
ものにバインドしようとしています。AboutText
文字列自体を設定するには、次のStringTemp
ようなものを使用して文字列にバインドできる必要があります。
this.AddBindings(
new Dictionary<object, string>()
{
{ this, "{'StringTemp':{'Path':'AboutText'}}" },
});
の部分を説明するためだけに:{ this, "{'StringTemp':{'Path':'AboutText'}}" }
、これらは次のように考えることができます{ TargetObject, "{'TargetPropertyName':{'Path':'SourcePropertyName'}}" }
:
- TargetObject(
this
)は、プロパティ値を設定することを目的としているオブジェクトです
- TargetPropertyName(
StringTemp
)は、設定しようとしている名前プロパティです
- SourcePropertyName(
AboutText
)は、値のソースとなるプロパティの名前です。
Mvxはフィールドではなくプロパティを使用するためprivate string StringTemp {get;set;}
、バインド可能ですが、そうではないことに注意してくださいprivate string StringTemp;
。
必要に応じて、この文字列参照に対して双方向バインディングを実行することもできます...ただし、そのためにはカスタムバインディング情報を設定する必要があります-ViewModelを更新するには、イベントが発生してキャプチャされる必要があります(私はそれを別の日に残しておきます!)
直接バインディングが探しているものではない状況では、いつでもPropertyChangedをサブスクライブして、より詳細なコードで通知を処理できます...例:
ViewModel.PropertyChanged += (s,e) =>
{
if (e.PropertyName == "AboutText")
{
// do something complicated here with the new ViewModel.AboutText value
}
};
...しかし、私は個人的にこのタイプのコードをできる限り避ける傾向があります...