0

何らかの理由で、一部のコントロールの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);
};

上記のコードは、実行時に静的リソースが見つからないというエラーが表示される前に実行されるため、リソースがコレクションに追加されました。

何かアイデアはありますか?

4

1 に答える 1

0

次のように、ViewModelをXAMLのリソースとして定義できます。

<vm:SomeViewModel x:Key="ViewModel"/>

DataTemplateでDataContextにバインドする場合は、次を使用できます。

{Binding Path=DataContext, ElementName=uc}

ウィンドウ/ユーザーコントロール名がx:Name = "uc"であると仮定するか、@stukselbaxが次のように記述します。

{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=[UserControl|Window]}} 
于 2012-08-03T10:50:07.667 に答える