/ / UserControlのデータコンテキストの変更-c#、wpf、user-controls

UserControlのデータコンテキストを変更する - c#、wpf、user-controls

変更できないユーザーコントロールを使用する必要があります。この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は1

ItemsControlのItemTemplateで使用されるUserControlは、明示的に設定しないでください。 DataContext プロパティを使用すると、アイテムコンテナ(ここのListBoxItemなど)からDataContextを継承できなくなります。

この問題の唯一の有効な解決策は、UserControlのコンストラクターからDataContextの割り当てを削除し、可能な「内部」DataContextベースのバインディングを置き換えることです。 RelativeSource または ElementName バインディング、など

<TextBlock
Text="{Binding SomeText, RelativeSource={RelativeSource AncestorType=UserControl}}"/>

どこで SomeText UserControlクラスのプロパティです。

原則として、決して設定しないでください DataContext UserControlのプロパティを明示的に。