Jak ustawić tekst hiperłącza WPF za pośrednictwem powiązania danych?

129

W WPF chcę utworzyć hiperłącze, które prowadzi do szczegółów obiektu, i chcę, aby tekst hiperłącza był nazwą obiektu. W tej chwili mam to:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">Object Name</Hyperlink></TextBlock>

Ale chcę, aby „Nazwa obiektu” była powiązana z rzeczywistą nazwą obiektu. Chciałbym zrobić coś takiego:

<TextBlock><Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}" Text="{Binding Path=Name}"/></TextBlock>

Jednak klasa Hyperlink nie ma właściwości tekstu ani zawartości, która byłaby odpowiednia dla powiązania danych (czyli właściwości zależności).

Jakieś pomysły?

rdeetz
źródło

Odpowiedzi:

213

Wygląda dziwnie, ale działa. Robimy to w około 20 różnych miejscach w naszej aplikacji. Hyperlinkniejawnie konstruuje a, <Run/>jeśli umieścisz tekst w jego "zawartości", ale w .NET 3.5 <Run/>nie pozwoli ci się z nim powiązać, więc musisz jawnie użyć TextBlock.

<TextBlock>
    <Hyperlink Command="local:MyCommands.ViewDetails" CommandParameter="{Binding}">
        <TextBlock Text="{Binding Path=Name}"/>
    </Hyperlink>
</TextBlock>

Aktualizacja : należy zauważyć, że od .NET 4.0 właściwość Run.Text może być teraz powiązana:

<Run Text="{Binding Path=Name}" />
Bob King
źródło
Czy to oznacza, że ​​właściwość content hiperłącza to kolekcja Inlines?
Mal Ross,
4
Czy to tylko ja, czy to uniemożliwia działanie łącza?
Tobias Valinski,
Trzeba jeszcze obsłużyć RequestNavigate
bułki
12

To zadziałało dla mnie w „Stronie”.

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>
Jamie Clayton
źródło