web-dev-qa-db-ja.com

データバインディングを介してWPFハイパーリンクのテキストを設定するにはどうすればよいですか?

WPFでは、オブジェクトの詳細に移動するハイパーリンクを作成し、ハイパーリンクのテキストをオブジェクトの名前にしたいです。今、私はこれを持っています:

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

しかし、「オブジェクト名」をオブジェクトの実際の名前にバインドしたいです。私はこのようなことをしたいと思います:

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

ただし、ハイパーリンククラスには、データバインディングに適したテキストまたはコンテンツプロパティ(つまり、依存関係プロパティ)がありません。

何か案は?

122
rdeetz

奇妙に見えますが、動作します。アプリの約20か所で実行します。 Hyperlinkは、「コンテンツ」にテキストを入れると<Run/>を暗黙的に構築しますが、.NET 3.5では<Run/>はバインドできませんので、明示的にする必要がありますTextBlockを使用します。

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

Update:.NET 4.0以降、 Run.Textプロパティ をバインドできることに注意してください:

<Run Text="{Binding Path=Name}" />
202
Bob King

これは「ページ」で私のために働いた。

<TextBlock>
    <Hyperlink NavigateUri="{Binding Path}">
        <TextBlock Text="{Binding Path=Path}" />
    </Hyperlink>
</TextBlock>
8
Jamie Clayton

上記の例のWindowsストアアプリ(およびWindows Phone 8.1 RTアプリ))が機能しない場合は、HyperlinkBut​​tonを使用して、ContentおよびNavigateUriプロパティを通常どおりバインドします。

1
Ivan Ičin