Трябва да работя с 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 изрично.