Есть много способов справиться с этим, с различными компромиссами. Для простоты и работы с тем, что вы предоставили, я бы сделал следующее:
Я предполагаю, что в вашем ChildWindow
классе вы устанавливаете DataContext
на new ChildWindowViewModel();
или иным образом создаете StaticResource
в своем XAML. Это решение потребует от вас удалить это.
Просто потребуйте BitmapImage
в конструкторе ChildWindowViewModel
и удалите из него знание MainWindowViewModel
.
public class ChildWindowViewModel : ViewModelBase
{
public ChildWindowViewModel(BitmapImage image)
{
_imge = image;
}
private BitmapImage _imge;
public BitmapImage Imge
{
get { return _imge; }
set
{
_imge = value;
RaisePropertyChanged("Imge");
}
}
}
Теперь в вашем MainWindowViewModel
вы можете обновить метод DisplayChildWin
следующим образом:
private void DisplayChildWin()
{
var childWindow = new ChildWindow();
var childWindowViewModel = new ChildWindowViewModel(Imge);
childWindow.DataContext = childWindowViewModel;
childWindow.Show();
}
Я бы попытался удалить творение ChildWindow
полностью из вашего MainWindowViewModel
класса. Это то, что лучше всего обрабатывается фабрикой, которая может быть введена в MainWindowViewModel
. Адаптивный код через C # - отличная книга, в которой подробно рассматриваются вопросы инверсии зависимости, SOLID и некоторые простые абстракции.