2009-04-21 51 views
2

在WPF中,如何獲取超鏈接應從對象屬性調用的命令的引用?WPF - 從數據獲取超鏈接命令?

我正在使用MVVM模式創建一個WPF應用程序。主窗口中的列表框顯示超鏈接。每個超鏈接在點擊時將調用其中一個視圖模型的ICommand屬性。我如何指定應該調用哪個ICommand?

這是我到目前爲止所嘗試的:超鏈接包含在ViewModel.Hyperlinks屬性中,該屬性綁定爲列表框的ItemsSource。超鏈接屬性包含類型MyHyperlink的對象:

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

的MyHyperlink.ViewModelCommand屬性包含在單擊超鏈接時,應調用視圖模型的ICommand的名稱。我想使用該值爲WPF Hyperlink控件的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.Command類型爲ICommand,而不是string。你要麼需要修改MyHyperlink類,這樣ViewModelCommand也是ICommand,或者寫一個IValueConverter會發現在你的視圖模型給出的命令名稱正確ICommand實施。

1

我已經實現了一個使用的IValueConverter的解決方案。它被寫爲an article on The Code Project。希望它能幫助其他人。

+0

在動態命令你的代碼項目的文章,你提到有比使用的IValueConverter一個更好的辦法。你能讓我們知道這個祕密嗎? – dthrasher 2010-05-08 18:54:29

+0

未平移。我正在使用IValueConverter。所以,不是祕密。 – 2010-06-24 14:31:33