2009-04-21 5 views
2

WPFでは、ハイパーリンクがオブジェクトプロパティから呼び出すコマンドへの参照を取得するにはどうすればよいですか?WPF - データからハイパーリンクコマンドを取得しますか?

MVVMパターンを使用してWPFアプリケーションを作成しています。メインウィンドウのリストボックスはハイパーリンクを解除します。各ハイパーリンクは、クリックされるとビューモデルのICommandプロパティの1つを呼び出します。どのICommandを呼び出さなければならないのかをどのように指定するのですか?

これまでに試したことは次のとおりです。ハイパーリンクは、リストボックスのItemsSourceとしてバインドされているViewModel.Hyperlinksプロパティに含まれています。ハイパーリンクの特性は、型MyHyperlinkのオブジェクトが含まれています。

public class MyHyperlink 
{ 
    public string Text { get; set; } 
    public string ViewModelCommand { get; set; } 
    public int RecordID { get; set; } 
} 

MyHyperlink.ViewModelCommandプロパティは、ハイパーリンクがクリックされたときに呼び出されるべきビューモデルのICommandの名前が含まれています。 WPFハイパーリンクコントロール のCommandプロパティのPropertyPathを指定するために、その値を使用します。 リストボックスのPropertyPathリソースをコマンドの名前で作成しようとしましたが、WPFはそれを受け入れません。ここに私のXAMLは次のとおりです。

<ListBox ItemsSource="{Binding Hyperlinks}"> 
    <ListBox.Resources> 
     <PropertyPath x:Key="CommandPath" Path="{Binding ViewModelCommand}" /> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <Hyperlink Command="{StaticResource CommandPath}" 
         CommandParameter="{Binding Path=RecordID}"> 
        <TextBlock Text="{Binding Text}" /> 
       </Hyperlink> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

どのように私は、ハイパーリンクがクリックされたときのICommandが呼び出されるかを指定できますか?上記のようにリソースを作成するのですか、それとも他の方法で作成したものですか?私はXAMLでこれを行う必要があります - 私はコードビハインドに頼っていません。ご協力いただきありがとうございます!

答えて

2

Hyperlink.CommandICommandであり、stringではないため、上記のコードは機能しません。 ViewModelCommandICommandになるようにMyHyperlinkクラスを変更するか、ビューモデルでコマンド名を指定して正しいICommandの実装を見つけるIValueConverterと記述する必要があります。

1

私はIValueConverterを使用するソリューションを実装しました。それはan article on The Code Projectと書かれています。うまくいけば、それは他の人々を道に導く助けになるでしょう。

+0

ダイナミックコマンドに関するコードプロジェクトの記事では、IValueConverterを使用するよりも良い方法があると述べました。あなたは秘密を教えてくれますか? – dthrasher

+0

パンが外れませんでした。私はIValueConverterを使用しています。だから、秘密はない。 –

関連する問題