何らかの理由で、一部のコントロールのDataTemplates内のViewModelプロパティにバインドできません。バインディング自体の結果は予測できず、機能する場合と機能しない場合があります。このため、DataContextとして設定する以外の方法でViewModelを公開することを考えています。
最初に考えたのは、ViewModelをResourcesコレクションに追加することでした。私はUIにTabControlsを使用しているので、ビューを表示する必要があるときはいつでも、データテンプレートを介して表示されます。
<DataTemplate DataType="{x:Type vm:SomeViewModel}">
<vw:SomeView />
</DataTemplate>
この状況では、ビューは自動的にインスタンス化され、そのDataContextはテンプレートで設定されたViewModelに設定されます。このViewModelをViewのリソース(例:key = viewModel)で使用できるようにして、次のように使用できるようにする方法はありますか?
<TextBlock Text="{Binding SomeProperty, Source={StaticResource viewModel}}" />
ビューのLoadedイベントで、コードに追加してみました。
this.Loaded += (s, e) =>
{
this.Resources.Add("viewModel", this.DataContext);
};
上記のコードは、実行時に静的リソースが見つからないというエラーが表示される前に実行されるため、リソースがコレクションに追加されました。
何かアイデアはありますか?