2017-09-29 14 views
0

ここは私の状況です。私はViewとViewModelを持っています。ビューのDataContextはViewModelに設定されます。サードパーティのコントロールを使用しているため、コードビハインドにいくつかのコードを記述する必要があります。コードビハインドでは、StraightConnectorToolというオブジェクトを作成します。ビューがViewModelにバインドされているときにコントロールをバインドしますか?

私のビューでは、このオブジェクトにバインドする必要があります。ビューのDataContextがコードビハインドで設定されている場合:

DataContext = this; 

次のバインドは正常に機能します。

<BarItemToolBehavior ActiveTool="{Binding ActiveTool, ElementName=diagram, Mode=TwoWay}" 
           Tool="{Binding StraightConnectorTool}"/> 

ここで、diagramはビューのサードパーティコントロールの名前で、ActiveToolはそのプロパティの1つです。

ただし、ViewのDataContextがViewModelに設定されている場合、バインディングは機能しません。 DataContextがViewModelに設定されているときに、ビューにバインドする方法を理解しようとしています。何か案は?

+0

'this.DataContext = this;'はWPF MVVMのがんです。 [この記事ではその理由を説明します](http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html)それはちょっと長いが、化学療法もそうであることに注意してください。 – Will

答えて

1

BarItemToolBehaviorのDataContextをビューにバインドできます。ビューを見つけるためにRelativeSource FindAncestorを使用して、コードの背後にある名前またはXAMLで名前を指定します。より良い解決策は、そのオブジェクトを所属するVMに移動することです。

+0

RelativeSource FindAncestorを使用しています。先端に感謝します。ところで、私はVMにオブジェクトを移動することに同意しますが、それは別の問題です... – cce1911

関連する問題