私のアプリケーション内には、多くのヘルプ ページがあり、それらはすべて同様のレイアウト (ヘッダーと本文) を持っています。
現時点では、ヘルプ ページごとに View、ViewModel、.xaml、および .json ファイルを構成しています。
問題は、私のアプリが約 20 のヘルプ ページ (聞かないでください) を持つところまで肥大化し、ヘルプ ファイルごとにこれらをコピー アンド ペーストすることは明らかに非効率的でエラーが発生しやすいことです。私がしたいのは、単一の HelpViewModel、HelpView、Page_Help.xml、そしてすべてのヘルプ ページに対して、関連するテキスト リソースを含む異なる .json ファイルです。
既存の MvvmCross トピックを調べても、これを達成する方法がわかりません。
したがって、私の XAML には次のような見出しがあります。
<TextView
style="@style/HelpTextTitle"
local:MvxBind="{'Text':'Path':'TextSource','Converter':'Language','ConverterParameter':'Heading1'}}"
/>
ViewModel と同じ名前の json ファイル (および automagic によってリンクされる) は、次のようになります。
{
"Heading1":"Sample Help Heading",
}
そして、引数を受け入れることができる HelpViewModel があります-jsonファイルの名前を言ってください
public string HeaderFile { get; private set; }
public HelpViewModel (string headerFile)
{
HeaderFile = headerFile;
}
json ファイルは現在、このクラスを介して私が考える ViewModel に関連付けられています。
public class TextProviderBuilder : MvxTextProviderBuilder
...
protected override IDictionary<string, string> ResourceFiles
{
get
{
var dictionary = this.GetType()
.Assembly
.GetTypes()
.Where(t => t.Name.EndsWith("ViewModel"))
.Where(t => !t.Name.StartsWith("Base"))
.ToDictionary(t => t.Name, t => t.Name);
dictionary[Constants.Shared] = Constants.Shared;
return dictionary;
}
}
そして、メインアプリはそれをテキストプロバイダーとして登録します(したがって、ViewModel-Jsonファイルのオートマジックを促進します)。
var builder = new TextProviderBuilder();
this.RegisterServiceInstance<IMvxTextProvider>(builder.TextProvider);
したがって、明らかにここでは、同じ HelpPage リソースを使用したいのですが、そのヘルプ ページのコントロールを、パラメーター (Header1) と同じ名前の (できれば) 別の json ファイル、または必要に応じて別のパラメーターにバインドできます。単一の json ファイル。
どうもありがとう!
マシュー
編集:以下のスチュアートのソリューションは完全に機能します。ViewModel のコンストラクターを通過する RequestNavigate を呼び出すときに、json ファイルの名前を渡すだけです。
return new MvxRelayCommand(() => this.RequestNavigate<GeneralHelpViewModel>(new { helpKey = "DescribeAudioCrimeStatementHelpViewModel" }));
MvvmCross (最近ではない) の正確なビルドでは、MvxLanguageBinder はプライベートであり、アクセスできないため、私がしなければならなかった唯一のことは、独自の MvxLanguageBinder を作成することでした。
Stuartのリンクからバージョンをコピーして貼り付け、それを使用しました: