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>
ただし、ハイパーリンククラスには、データバインディングに適したテキストまたはコンテンツプロパティ(つまり、依存関係プロパティ)がありません。
何か案は?
奇妙に見えますが、動作します。アプリの約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}" />
これは「ページ」で私のために働いた。
<TextBlock>
<Hyperlink NavigateUri="{Binding Path}">
<TextBlock Text="{Binding Path=Path}" />
</Hyperlink>
</TextBlock>
上記の例のWindowsストアアプリ(およびWindows Phone 8.1 RTアプリ))が機能しない場合は、HyperlinkButtonを使用して、ContentおよびNavigateUriプロパティを通常どおりバインドします。