У меня есть модель представления, в которой есть команда, в которой отображается новое окно (у которого есть собственная модель представления). Модель просмотра нового окна имеет различные свойства, и когда я закрываю новое окно, я хочу передать эти свойства обратно в первую модель представления, которая ее вызвала.Получить значения свойств из другой модели представления при закрытии окна
Я разрушаю шаблон MVVM здесь, так как просто казалось, что быстрее и проще показать новое окно с помощью ShowDialog()
. Вот пример моего кода:
MainViewModel:
//Note: The OnPropertyChanged and CanExecute functions are implemented
//method via command to show a new window
private void ShowSYOWindow(object parameter)
{
SYOWindow syo = new SYOWindow();
syo.ShowDialog();
}
вид модели
Нового окна:
class SYOWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private DateTime _timeStart;
public DateTime TimeStart
{
get { return _timeStart; }
set { _timeStart = value; OnPropertyChanged("TimeStart"); }
}
private DateTime _timeStart2;
public DateTime TimeStart2
{
get { return _timeStart2; }
set { _timeStart2 = value; OnPropertyChanged("TimeStart2"); }
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Вот код-за для SYOWindow:
using Proj1.ViewModels; //viewmodel located in different folder in project
public partial class SYOWindow : Window
{
public SYOWindowViewModel vm => (SYOWindowViewModel)DataContext; //error here
public SYOWindow()
{
InitializeComponent();
}
private void OKBtn_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
private void CancelBtn_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}
}
Таким образом, после Я открываю новое окно с 'syo.ShowDialog()' из MainViewModel, и я установил некоторые свойства в SYOWindo wViewModel для окна syo, я хочу вернуть эти свойства в MainViewModel. Я не могу понять, что такое «правильный» и самый чистый способ сделать это. Я читал, что могу использовать DataContext, а затем получать значения таким образом, но это кажется неправильным. Но, возможно, единственный способ, с которого я разбил MVVM, используя showdialog.
Спасибо! Просто интересно, как второй фрагмент кода, который вы опубликовали, упрощает код, предоставляя окну свойство viewmodel? – pfinferno
О, не обращай внимания, я вижу сейчас. Спасибо за предложение! Перейдя также в свойство dialogresult. – pfinferno
Не удалось получить 'public SYOWindowViewModel ViewModel => (SYOWindowViewModel) DataContext;' работать правильно. Говорит, что DataContext не может использоваться как тип. – pfinferno