少し背景: ControlPresenter と呼ぶクラスにロードするプロパティ (コントロール タイプ、ラベル、マージンなど) のテーブルに格納されているデータベースから WPF UI をロードしています。基本的に、ControlPresenter を ContentPresenter の DataContext として設定し、TemplateSelector を使用して、読み込むコントロールのタイプを選択します。DataTemplate は、ControlPresenter によって公開された DependencyProperties からプロパティをロードします。
これはすべて非常にうまく機能します。私が直面している問題は、他のプレゼンター (INotifyPropertyChanged を実装する通常のプロパティを持つ) のデータ (たとえば、TextBox の Text プロパティをプレゼンターの Name プロパティにバインドする) をこれらのコントロールにバインドしようとすると発生します。コントロールの DataContext は関連付けられた ControlPresenter であるため、他のプレゼンターに直接バインドできず、同じ依存関係プロパティに 2 つのバインドを設定できません (コントロールと目的のプレゼンター プロパティを同じ DP にバインドできません)。 .
可能な解決策:
- 他のすべてのプレゼンターを DP を使用するように変換できます (非常に時間がかかり、継承で問題が発生する傾向があります)。
- 通過させたいプロパティごとに 2 つの DP を使用し、変更された通知を通じてそれらを結び付けようとすることができます
これらはどちらも問題があり、壊れやすいように見えるので、他の誰かがより良い解決策を思いついたことを願っています.
編集:かなりうまく機能するソリューションを思いつきました(以下を参照)。これを見てくれたみんなに感謝します。私よりも良い方法を思いついたら教えてください。