2

SilverLight アプリケーションでは、ViewModel に「vmProperty」と呼ばれるプロパティと「dgSource」と呼ばれるリストがあります。

dgSource を ItemsSource としてデータグリッドにバインドします。この時点で、各データグリッド行のデータコンテキストが dgSource の各項目に変更されます。列の 1 つ、たとえばチェックボックス列は、vmProperty にバインドする必要があります。しかし、ViewModel は行のデータ コンテキストではないため、このプロパティにアクセスできません。

この問題を回避するにはどうすればよいですか? 質問が明確でない場合は、お知らせください。サンプルを投稿します。前もって感謝します。

4

2 に答える 2

0

ViewModelがLayoutRootのDataContextとして割り当てられていると仮定すると、これは機能するはずです:-

IsChecked="{Binding DataContext.vmProperty, ElementName=LayoutRoot}"

もちろん、これは機能しません。最終的にはテンプレートが複製されるため、バインディングが実際に使用されるネームスコープには「LayoutRoot」は存在しません。

これはViewModelであるため、最も簡単な解決策はモデルを変更することです。dgSourceで使用可能なオブジェクトに必要な値を公開するかParent、ViewModelに戻るプロパティを公開します。

于 2009-12-01T12:27:54.547 に答える
0

chechbox 列の checked プロパティを次のように設定してみてください。

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YourViewClassName}}, Path=DataContext.vmProperty}

これは、ビュー タイプである親要素が検出され、その DataContext の vmProperty が値として取得されることを意味します。

アップデート:

WPFのソリューションでした。

Silverlight の場合、次のような構成を使用できると思います。

{Binding Path=DataContext.vmProperty, ElementName=YourElement}

YourElement の DataContext は、ビュー モデルのインスタンスです。たとえば、グリッドになると思います。

<Grid x:Name="YourElement" DataContext={Binding}>
<!-- DataGrid here -->
</Grid>
于 2009-12-01T11:19:16.183 に答える