WPF - получить команду Hyperlink из данных? - PullRequest
2 голосов
/ 21 апреля 2009

Как в WPF получить ссылку на команду, которую гиперссылка должна вызывать из свойства объекта?

Я создаю приложение WPF, используя шаблон MVVM. Список в главном окне отображает гиперссылки. Каждая гиперссылка будет вызывать одно из свойств ICommand модели представления при нажатии на нее. Как мне указать, какой ICommand должен быть вызван?

Вот что я пробовал до сих пор: гиперссылки содержатся в свойстве ViewModel.Hyperlinks, которое связано как ItemsSource для поля со списком. Свойство Hyperlinks содержит объекты типа MyHyperlink:

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

Свойство MyHyperlink.ViewModelCommand содержит имя модели представления ICommand, которая должна вызываться при нажатии на гиперссылку. Я хочу использовать это значение для указания PropertyPath для свойства Command элемента управления Hyperlink WPF , Я попытался создать ресурс 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 ]

3 голосов
/ 21 апреля 2009

Я думаю, что ваш код выше не работает, потому что Hyperlink.Command имеет тип ICommand, а не string. Вам нужно либо изменить класс MyHyperlink, чтобы ViewModelCommand также был ICommand, либо написать IValueConverter, который найдет правильную реализацию ICommand с учетом имени команды в модели представления.

1 голос
/ 24 апреля 2009

Я реализовал решение, которое использует IValueConverter. Она написана как статья о проекте Code . Надеюсь, это поможет другим людям в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...