Из mainWIndow.xaml, который использует в качестве DataContext mainWindowViewModel, я открываю новое окно с именем addNewItem.xaml, которое использует в качестве DataContext ItemsViewModel.
В addNewItem.xaml у меня есть DataGrid
<DataGrid SelectedItem="{Binding Path=SelectedHotel}" ItemsSource="{Binding HotelsList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Width="350" Header="Hotel" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Path=Name}"></Label>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Я хочу передать SelectedHotel из ItemsViewModel в mainWindowViewModel.
Я попытался сделать это с помощью следующего кода (без удачи)
//This is a property from ItemsViewModel
private Hotel _selectedHotel { get; set; }
public Hotel SelectedHotel {
get { return _selectedHotel; }
set {
_selectedHotel = value;
RaisePropertyChanged("SelectedHotel");
OnSelectedItemChanged();
}
}
void OnSelectedItemChanged() {
MainWIndowViewModel = new MainWIndowViewModel(this.SelectedHotel);
}
В mainWIndowViewModel у меня также есть еще одно свойство (с тем же именем, SelectedHotel), которое получает значение через конструктор
public MainWIndowViewModel(Hotel selectedHotel)
: this(new ModalDialogService()) {
this.SelectedHotel = selectedHotel;
}
В mainWindow.xaml я хочу отобразить значение свойства
<Label Content="{Binding SelectedHotel.Name}" DockPanel.Dock="Top"></Label>
что я делаю не так?
В общем, мне нужно знать правило делать что-то подобное.
Как я могу уведомить свойство из другого свойства?
Спасибо
Решение
Я решаю это с помощью сообщений от mvvm light.