/ / Zmień tekst danych kontrolki użytkownika - c #, wpf, user-control

Zmień Datacontext z UserControl - c #, wpf, user-controls

Muszę pracować z UserControl, którego nie mogę zmienić. Tekst danych tego UserControl jest ustawiony w swoim konstruktorze.

public ParameterControl()
{
Datacontext = this;
}

UserControl powinien być szablonem moich 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>

Moje zaimplementowane wiązanie do tekstu danych nie działa.

Czy ktoś wie, jak mogę rozwiązać ten problem lub powiedzieć mi, w którym momencie ustawione są dane tekstowe?

Dzięki za pomoc, Alex

EDYTOWAĆ:

Witaj ponownie,

nie ma szans na przebudowanie ParameterControl. Mam ten pomysł ...

<ListBox
ItemsSource="{Binding Parameters}"
<ListBox.ItemTemplate>
<DataTemplate>
<parameterControl:ParameterControl
ParamName="{Binding <!--To the item in the ItemsSource-Collection-->}"
</parameterControl:ParameterControl>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

Parametr Sterowanie wymaga jedynie nazwy właściwości ParamName, aby wyświetlać się poprawnie. A ta nazwa znajduje się w pozycji ItemsSource-Collection.

Czy ktoś teraz jak związać?

Dzięki za pomoc, Alex

Odpowiedzi:

1 dla odpowiedzi № 1

UserControl, który jest używany w ItemTemplate ItemControl, nie może jawnie ustawiać jego DataContext , ponieważ uniemożliwia to dziedziczenie DataContext z kontenera pozycji (np. ListBoxItem tutaj).

Jedynym prawidłowym rozwiązaniem tego problemu jest usunięcie przypisania DataContext z konstruktora UserControl i zastąpienie wszelkich możliwych „wewnętrznych” powiązań opartych na DataContext przez RelativeSource lub ElementName wiązania, jak

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

gdzie SomeText jest właściwością klasy UserControl.

Zasadniczo nigdy nie ustawiaj DataContext jawnie właściwość UserControl.