/ / Промяна на информационния текст на UserControl - c #, wpf, потребителски контроли

Промяна на информационния текст на UserControl - c #, wpf, потребителски контроли

Трябва да работя с UserControl, който не мога да променя. Datacontext на този UserControl е настроен на себе си в своя конструктор.

public ParameterControl()
{
Datacontext = this;
}

UserControl трябва да бъде шаблонът на елементите ми в ListBox.

<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
DataContext="{Binding ElementName=StepView, Path=Datacontext.SelectedStep}" //this doesn"t work
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Моето въведен задължителен за datacontext не работи.

Някой знае ли как мога да разреша този проблем или да ми кажеш в кой момент от време са поставени datacontexts?

Благодаря за помощта, Алекс

РЕДАКТИРАНЕ:

Здравей отново,

няма шанс за възстановяване на 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>

Параметърът Контрол се нуждае само от името, за да се показва правилно собствеността ParamName. И това име е в елемента на колекцията ItemsSource.

Някой сега как да се върже?

Благодаря за помощта, Алекс

Отговори:

1 за отговор № 1

ПотребителятControl, който се използва в ItemTemplate на ItemControl, не трябва изрично да го настрои DataContext property, защото това предотвратява наследяването на DataContext от контейнера на елемента (например ListBoxItem тук).

Единственото валидно решение за този проблем е да се премахне присвояването на данни от конструктор на UserControl и да се заменят всички възможни "вътрешни" обвързвания, основани на DataContext, от RelativeSource или ElementName свързвания, като

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

където SomeText е собственост на класа UserControl.

Като общо правило, никога не задайте DataContext собственост на UserControl изрично.