変更できないユーザーコントロールを使用する必要があります。このUserControlのDatacontextは、コンストラクターでそれ自体に設定されます。
public ParameterControl()
{
Datacontext = this;
}
UserControlは、ListBox-Itemsのテンプレートでなければなりません。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
DataContext="{Binding ElementName=StepView, Path=Datacontext.SelectedStep}" //this doesn"t work
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
データコンテキストに実装されたバインディングが機能しません。
誰も私がこの問題を解決する方法を知っていますか、データコンテキストが設定された時点で教えてくれますか?
手伝ってくれてありがとう、 アレックス
編集:
また会ったね、
ParameterControlを再構築する機会はありません。 私はこのアイデアを持っています...
<ListBox
ItemsSource="{Binding Parameters}"
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
ParamName="{Binding <!--To the item in the ItemsSource-Collection-->}"
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
パラメーターControlに必要なのは、ParamNameプロパティの名前のみを正しく表示することです。 そして、この名前はItemsSource-Collectionのアイテムにあります。
バインドする方法は誰ですか?
助けてくれてありがとう、アレックス
回答:
回答№1は1ItemsControlのItemTemplateで使用されるUserControlは、明示的に設定しないでください。 DataContext
プロパティを使用すると、アイテムコンテナ(ここのListBoxItemなど)からDataContextを継承できなくなります。
この問題の唯一の有効な解決策は、UserControlのコンストラクターからDataContextの割り当てを削除し、可能な「内部」DataContextベースのバインディングを置き換えることです。 RelativeSource
または ElementName
バインディング、など
<TextBlock
Text="{Binding SomeText, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
どこで SomeText
UserControlクラスのプロパティです。
原則として、決して設定しないでください DataContext
UserControlのプロパティを明示的に。