Я пишу программу на c#, wpf по паттерну mvvm. Возник вопрос, как передать данные из одной viewmodel в другую. Перерыл кучу похожих статей, но так и не смог разобраться.
У меня есть View, которая содержит информацию о поставках, при нажатии на кнопку появляется UserControl, в котором можно изменять выбранную, на предыдущем UserControl, запись.
//Поле и свойство выбираемой записи
private SupplyModel _selectedSupply;
public SupplyModel SelectedSupply
{
get => _selectedSupply;
set
{
_selectedSupply = value;
OnPropertyChanged(nameof(SelectedSupply));
OnPropertyChanged(nameof(SelectedSupplyWorkers));
}
}
//Команда для отображения view для редактирования
private void ExecuteShowAddSupplyCommand(object? obj)
{
CurrentChildView = new EditSupplyViewModel();
IsEnabled = false;
BackVisibility = Visibility.Visible;
}
Соответственно вопрос, как я могу передать SelectedSupply из SupplyViewModel в EditSupplyViewModel?
UserControl отображается в ContentControl
<ContentControl HorizontalAlignment="Right"
Width="{Binding ActualWidth, ElementName=WidthDockPanel}"
Content="{Binding CurrentChildView}">
<UserControl.Resources>
<DataTemplate DataType="{x:Type viewmodel:EditSupplyViewModel}">
<local:EditSupplyView/>
</DataTemplate>
</UserControl.Resources>
EditSupplyViewModel- ну так передайте ему что нужно – vitidev Mar 22 '23 at 19:30EditSupplyViewModelнужно создавать два конструктора, один будет принимать аргументы, а другой нет, так как view ругается, когда во viewmodel нет конструкторов не принимающих значение. И когда происходит инициализацияEditSupplyView, она создает новыйEditSupplyViewModel, который уже будет пустой. Вполне вероятно, что я делаю, что то не так и мне нужно передать созданныйEditSupplyViewModelв контекст второй view, но я не знаю как. – oLaDushek Mar 22 '23 at 19:47d:DataContext...IsDesignTimeCreatable=False. В рантайме такое будет если создавать DataContext прямо во вью - но это "стрелять себе по ногам". – vitidev Mar 22 '23 at 19:50<UserControl.DataContext> <viewmodel:SupplyViewModel/> </UserControl.DataContext>– oLaDushek Mar 22 '23 at 19:58