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 № 1UserControl, 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.