В моем проекте у меня есть список, который использует табличку с данными.В этом шаблоне данных у меня есть кнопка.Когда список генерирует результаты, источник элемента для этого списка устанавливается в некоторый набор свойств, назовем его 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. Выполнены. Я застрял в понимании того, как получитькнопка, которая является частью шаблона элемента списка, чтобы найти модель корневого представления и вызвать метод этой виртуальной машины без создания новой модели представления, которая бы сбросила все ранее сохраненные свойства.
Заранее спасибо