Не уверен, что я просто делаю это неправильно или неправильно понимаю некоторые примеры уже переполнения стека здесь и здесь .
Я пытаюсь взятьвыбранный элемент из моей первой модели представления и передать его другой модели представления, к которой я перемещаюсь.Цель этого состоит в том, чтобы я мог отобразить переданный элемент и позволить пользователю работать с ним.
Передача из первого вида модели
Это простоНебольшой фрагмент модели первого вида.Здесь я впервые перехожу к новой модели страницы / вида.Затем передайте объект SelectedRule с помощью мессенджера.Навигация выполняется с использованием класса / навигационного сервиса ViewModelLocator, предоставляемого с MVVM Light.
private ApprovedBomRule _selectedRule = new ApprovedBomRule();
public ApprovedBomRule SelectedRule
{
get { return _selectedRule;}
set { Set(ref _selectedRule, value); }
}
private void NavigateToUpdateRule()
{
//Navigate to Update Rule page
_navigationService.NavigateTo("UpdateBomRuleView");
//Pass selected rule as a parameter using messenger service
ApprovedBomRule ruleToSend = SelectedRule; // Selected by user.
Messenger.Default.Send(ruleToSend);
}
При получении модели вида
Вот моя вторая модель вида, в которой я регистрируютот же тип SelectedRule сверху и установите его в публичную переменную.
public class UpdateBomRuleViewModel : ViewModelBase
{
private ApprovedBomRule _passedRule;
public ApprovedBomRule PassedRule
{
get => _passedRule;
set => Set(ref _passedRule, value);
}
//Constructor
public UpdateBomRuleViewModel()
{
//Register message type
Messenger.Default.Register<ApprovedBomRule>(this, GetMessage);
}
//Set the property to passed object
public void GetMessage(ApprovedBomRule rule)
{
PassedRule = rule;
}
}
Мой конструктор достигнут, и задан метод register, но функция GetMessage () никогда не вызывается.Что мне здесь не хватает?
EDIT
Я сузил проблему до того факта, что метод register вызывается после отправки сообщения.Теперь вторая проблема, с которой я сталкиваюсь, - как мне зарегистрировать модель второго вида перед отправкой?Я использую локатор viewmodel на своих страницах, чтобы определить модели представления для каждой страницы.Несмотря на то, что я выполняю _navigation.NavigateTo () перед отправкой данных, модель представления не инициализируется до окончания отправки.
Пример локатора модели представления на странице
<local:BasePage x:Class="YAI.BomConfigurator.Desktop.Views.Rules.UpdateBomRuleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:YAI.BomConfigurator.Desktop"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="UpdateBomRuleView"
DataContext="{Binding UpdateBomRuleViewModel, Source={StaticResource Locator}}">
<Grid>
<TextBlock Text="{Binding PassedRule.Description}"
VerticalAlignment="Center"
HorizontalAlignment="Center">
</TextBlock>
</Grid>