Всем привет,
Я новичек в MVVM и возникли проблемы Как передать команду в другую ViewModel и что бы там вызвался определенный метод у меня это перевод текста из TextBox-ов.
В прикрепленном скриншоте у меня при выборе из Combobox-a загружается определенный UserControl по центру далее я вбиваю туда инфу и нажимаю на кнопку внизу для перевода. Проблема в том что эта кнопка привязана к MainViewModel а не к текущей ViewModel(CertificateViewMode)
Даже не знаю что выкладывать по коду, его так дофига для одной этой проблемы.
Постараюсь самое важное только выложить.
Кнопка в интерфейсе
<Button
x:Name="Btn_Translate"
Grid.Column="1"
Height="Auto"
Command="{Binding TranslateCommand}"
Style="{StaticResource MaterialDesignFlatButton}"
ToolTip="Перевести текст">
<materialDesign:PackIcon
Width="35"
Height="Auto"
VerticalAlignment="Center"
Foreground="DarkKhaki"
Kind="Translate" />
</Button>
Основная Вьюшка в конструктор передается коллекция UserControl-ов которые уже с генерировались в App.xaml.cs
public MainViewModel(IEnumerable<ITemplate> modules)
{
this.OpenFolderTemplate = new RelayCommand(this.OpenFolderAndLoadTemplate);
this.Templates = modules.OrderBy(m => m.Name).ToList();
if (this.Templates.Count > 0)
{
this.SelectTemplate = this.Templates[0];
}
}
private RelayCommand TranslateCommand { get; set; }
public List<ITemplate> Templates { get; private set; }
//Выбор UserControl в Combobox-e
public ITemplate SelectTemplate
{
get
{
return selectedTemplate;
}
set
{
if (value != selectedTemplate)
{
if (selectedTemplate != null)
{
selectedTemplate.Deactivate();
}
selectedTemplate = value;
selectedTemplate.RelayCommand = TranslateCommand;
OnPropertyChanged("SelectTemplate");
OnPropertyChanged("UserInterface");
}
}
}
Вот еще что связано с этим
Сам интерфейс шаблона, сюда я добавил только RelayCommand
interface ITemplate
{
string Name { get; }
UserControl UserInterface { get; }
RelayCommand RelayCommand { get; set; }
void Deactivate();
}
Класс который реализует интерфейс ITemplate
abstract class TemplateBase : ITemplate
{
private UserControl view;
protected abstract UserControl CreateViewAndViewModel();
public abstract string Name { get; }
public abstract RelayCommand RelayCommand { get; set; }
public UserControl UserInterface
{
get
{
if (view == null)
{
view = CreateViewAndViewModel();
}
return view;
}
}
public void Deactivate()
{
if (view != null)
{
var d = view.DataContext as IDisposable;
if (d != null) d.Dispose();
view = null;
}
}
}
Доп класс который уже загружает указанны UserControl и Вьюшку
Birth_Certificate() это уже класс во ViewModel
class Birth_CertificatePlugin : TemplateBase
{
protected override UserControl CreateViewAndViewModel()
{
return new Birth_Certificate() { DataContext = new Birth_CertificateView(RelayCommand) };
}
public override RelayCommand RelayCommand
{
get => throw new System.NotImplementedException();
set => throw new System.NotImplementedException();
}
public override string Name
{
get { return "Справка о рождении"; }
}
}
Хотел сделать что то типа того при выборе SelectTemplate контрола
selectedTemplate.RelayCommand = TranslateCommand;
Но он на этапе компиляции начинает ругаться NotImplementException();
Это студия сама мне с генерировала.
public override RelayCommand RelayCommand
{
get => throw new System.NotImplementedException();
set => throw new System.NotImplementedException();
}
Хочет что бы я что то в геттере и сеттере седлал но я не понимаю что. Не понимаю как выбраться из этой проблемы, я запутался. Может вообще все удалить и сделать по другому.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем приветВозникла задача портировать одно моё приложение написанное на языке c# (на платформе
Пользуюсь Windows 7x64 UltimateХочу попробовать Jet Brains Rider но получаю постоянную ошибку при запуске постоянное зависание, причем на всех версиях Rider 2017-2018...
я знаю как сделать выравнивание текста слева на право workSheetColumns()