1

Projects およびUsersという名前のプロパティを含む Viewmodel があります。Project クラスには、Project Manager、Date、AssignedTo プロパティが含まれています。私の見解では、アイテムソースがプロジェクトにバインドされているグリッドがあり、データ列がプロジェクト マネージャー、日付、担当者にバインドされています。

ここで、オートコンプリート テキスト ボックスを追加することで、AssignedTo 列にセル編集テンプレートを追加しました。これにより、ユーザーがその列を編集すると、自動提案されたユーザー値が提供されます。私の問題は、このオートコンプリート テキスト ボックスの ItemSource を、Users (文字列のリスト) である ViewModel のプロパティにバインドすることです。グリッドは既に Project にバインドされているため、celledit テンプレートを ViewModel の他のプロパティであるUsersに強制的にバインドするにはどうすればよいですか。

別のプレゼンテーション プロパティをプロジェクトにアタッチするなど、これを行う方法がいくつかあることは理解していますが、このクラスはアプリケーションで頻繁に使用されるため、そうしたくありません。relativesource など、さまざまな種類のバインディングを試しましたが、この段階では何​​もうまく機能していないようです。多分私は何かが足りないのですか、それとも本当にこれを行う方法はありませんか?

4

1 に答える 1

0

私が見た最良の方法は、「データ コンテキスト プロキシ」と呼ばれるものを使用することです。次のように、XAML ドキュメントのリソース セクションに配置します。

<Window.Resources>
    <local:DataContextProxy x:Key="DataContextProxy" />
</Window.Resources>

これで、オートコンプリート コレクションから静的リソースとしてバインドできるようになりました。次に例を示します。

ItemsSource="{Binding Path=DataContext.MyViewModel.AutoCompleteItems,Source={StaticResource DataContextProxy}}"

DataContext(正しいバインドを取得するには、パスの前に を付ける必要があることに注意してください。)

これらの場合にRelativeSourceバインディングが機能しない理由はよくわかりませんが、Data Grid 内からバインドしようとしたときに同様の問題が発生しました。ただし、このデータ コンテキスト プロキシ メソッドは使いやすく、機能します。

于 2012-09-10T05:25:38.857 に答える