2

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

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

これまでに試したことは次のとおりです。ハイパーリンクは、リストボックスのItemsSourceとしてバインドされているViewModel.Hyperlinksプロパティに含まれています。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で行う必要があります。コードビハインドに頼りたくありません。ご協力いただきありがとうございます!

4

2 に答える 2

3

Hyperlink.Command上記のコードは、タイプがICommandではなくであるため、機能しないと思いますstringMyHyperlinkが になるようにクラスを変更するかViewModelCommand、ビュー モデルでコマンド名を指定して正しい実装を見つける をICommand作成する必要があります。IValueConverterICommand

于 2009-04-21T13:28:19.767 に答える
1

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

于 2009-04-24T17:31:09.850 に答える