В моем проекте у меня есть список, который использует шаблон данных. В этом шаблоне данных у меня есть кнопка. Когда список генерирует результаты, источником элемента для этого списка устанавливается некоторая коллекция свойств, назовем ее Results[0].
Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю кнопку для вызова метода из модели представления, метод не может быть найден, потому что вызов обращается к контексту списка, а не к корневому представлению. Я использую набор инструментов SimpleMVVM, который использует локатор, аналогичный набору инструментов MVVMLight.
Один из подходов, который я использовал, заключался в том, чтобы явно установить контекст данных для кнопки, объявив модель представления в ресурсах пользовательского управления и установив ее статически.
<UserControl.Resources>
<formatter:HighlightConverter x:Key="FormatConverter" />
<vml:SearchViewModel x:Key="vm" />
</UserControl.Resources>
а затем кнопка содержит
<HyperlinkButton HorizontalAlignment="Left"
Click="Button_Click"
Content="{Binding Type}"
Style="{StaticResource ListBoxtTitleHyperlink}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="GetDetailID" TargetObject="{Binding Source={StaticResource vm}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
Это работает в том смысле, что теперь я могу получить доступ к методу, но он создает новую модель представления, а не позволяет мне получить доступ к корневой модели представления представления. Следовательно, я теряю все свойства, которые могли быть у меня в предыдущей модели представления, поэтому я не могу передать их методу в качестве параметров.
Моя реализация может быть здесь. Так что я открыт для предложений. В таких сценариях, как лучше всего сделать так, чтобы кнопка в шаблоне данных списка вызывала метод из модели представления и передала параметры метода, полученные из выбранного элемента списка?
Чтобы увидеть полную реализацию кода, вы можете загрузить пример проекта из папки SkyDrive< /а>
Обновление Я начинаю награду за этот вопрос, так как он поставил меня в тупик. Не стесняйтесь загружать пример проекта для справки. Для ясности цель этого вопроса состоит в том, чтобы узнать, как выполнить следующее 1. Выберите строку из списка 2. Событие selectionchanged установит для свойства текстовое значение, отображаемое в пользовательском интерфейсе (двусторонняя привязка RecordID с использованием Inotify 3. Нажмите на кнопку в шаблоне элемента и вызовите метод, хранящийся в ViewModel, используя триггеры взаимодействия и отобразив в окне сообщения значение свойства RecordID.
Шаги I и 2 выполнены. Где я застрял, так это в понимании того, как получить кнопку, которая является частью шаблона элемента списка, чтобы найти модель корневого представления и вызвать метод этой виртуальной машины без создания экземпляра новой ViewModel, которая сбросит все ранее сохраненные свойства.
заранее спасибо