2009-04-21 4 views
2

WPF에서 하이퍼 링크가 개체 속성에서 호출해야하는 명령에 대한 참조를 얻으려면 어떻게해야합니까?WPF - 데이터에서 하이퍼 링크 명령 가져 오기?

MVVM 패턴을 사용하여 WPF 응용 프로그램을 만들고 있습니다. 기본 창의 목록 상자에서 하이퍼 링크를 제거합니다. 각 하이퍼 링크는 클릭 할 때 뷰 모델의 ICommand 속성 중 하나를 호출합니다. 어떤 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를 사용하고 있습니다. 그래서, 비밀은 없습니다. –