Это базовый дизайн приложения.
Все окно имеет ViewModel, внутри которого я определил два экземпляра моделей представления A и B, представляющих два пользовательских элемента управления. Модель представления B представляет собой строку состояния, в которой есть только строка, показывающая текст, который может быть чем угодно. Модель представления A — еще один пользовательский элемент управления, в котором я могу искать пользовательские истории. Итак, в основном я хочу показать итоги из модели представления A в модели представления B в пользовательском интерфейсе. Я попытался внедрить виртуальную машину B в A, но это не отразилось в окне. Как я могу решить эту проблему с помощью шаблона WPF MVVM?
Это фактический дизайн приложения.
Это код файла MainWindow.xaml, который имеет два элемента управления содержимым: один — выбранное окно, которое может меняться в зависимости от параметра, выбранного пользователем в левой части. Затем есть окно строки состояния, которое представляет собой просто строку состояния, в которой я хочу отображать некоторые данные в зависимости от действий в окне, выбранном пользователем.
Код: Выделить всё
Код: Выделить всё
using ResponsiveWorkManager.Commands;
using System.Reflection;
using System.Windows;
using System.Windows.Input;
namespace ResponsiveWorkManager.ViewModels
{
public class MainWindowViewModel : ViewModelBase
{
private ICommand logoutClick;
private ICommand menuItemClick;
private ViewModelBase selectedWindow;
private StatusBarViewModel statusBarVM;
private string versionNumber;
public MainWindowViewModel()
{
this.StatusBarVM = new StatusBarViewModel();
this.selectedWindow = new WorkItemsViewModel(this.StatusBarVM);
this.VersionNumber = $"Ver - {Assembly.GetEntryAssembly().GetName().Version.ToString()}";
}
public ICommand LogoutClick
{
get
{
return logoutClick ?? (logoutClick = new RelayCommand(CloseWindow));
}
}
public ICommand MenuItemClick
{
get
{
return menuItemClick ?? (menuItemClick = new RelayCommand(CreateWorkItemObject));
}
}
public ViewModelBase SelectedWindow
{
get { return selectedWindow; }
set
{
if (selectedWindow != value)
{
selectedWindow = value;
OnPropertyChanged(nameof(SelectedWindow));
}
}
}
public StatusBarViewModel StatusBarVM
{
get { return statusBarVM; }
set
{
if (statusBarVM != value)
{
statusBarVM = value;
OnPropertyChanged(nameof(StatusBarVM));
}
}
}
public string VersionNumber
{
get { return versionNumber; }
set
{
if (versionNumber != value)
{
versionNumber = value;
OnPropertyChanged("VersionNumber");
}
}
}
private void CloseWindow(object winHandle)
{
var myWindow = (Window)winHandle;
myWindow.Close();
}
private void CreateWorkItemObject(object windowName)
{
switch ((WindowName)windowName)
{
case WindowName.WorkItems:
SelectedWindow = new WorkItemsViewModel(this.StatusBarVM);
break;
case WindowName.Folders:
SelectedWindow = new FoldersViewModel();
break;
case WindowName.LeaveDetails:
SelectedWindow = new LeaveDetailsViewModel();
break;
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-wpf-mvvm