If you want to access the value of SelectedItem in MainWindowViewModel from CityDetailsViewModel class, you could try to refer to the code below.
MainWindow.xaml:
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Grid>
<ComboBox Height="50" ItemsSource="{Binding AirportsList}" SelectedItem="{Binding SelectedItem}" DisplayMemberPath="city"/>
</Grid>
MainWindow.xaml.cs:
using System.Collections.ObjectModel;
using System.Windows;
namespace ViewModelAccess
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class MainWindowViewModel
{
public MainWindowViewModel()
{
AirportsList = new ObservableCollection<Airport>()
{
new Airport(){ city="London"},
new Airport(){ city="Beijing"},
new Airport(){ city="NewYork"},
new Airport(){ city="Singapore"},
};
}
public ObservableCollection<Airport> AirportsList
{
get; set;
}
private Airport? _SelectedItem;
public Airport? SelectedItem
{
get => _SelectedItem;
set
{
if (_SelectedItem != value)
{
_SelectedItem = value;
Details();
}
}
}
private void Details()
{
if (string.IsNullOrEmpty(SelectedItem?.city)) { return; }
var CityDetailsWindow = new CittyDetailsWinow();
CityDetailsViewModel viewModel = new CityDetailsViewModel(this) ;
CityDetailsWindow.DataContext = viewModel;
CityDetailsWindow.Show();
}
}
public class Airport
{
public string city { get; set; }
}
}
CittyDetailsWinow:
<StackPanel>
<TextBlock Background="LightGreen" Text="{Binding CitySelecteItem.city}"/>
</StackPanel>
Codebehind:
223698-33.txt
The result:
Update:
I tested your project, you can use below code.
private void Details()
{
if (string.IsNullOrEmpty(SelectedItem?.city)) { return; }
var CityDetailsWindow = new CittyDetailsWinow();
CityDetailsWindow.DataContext= new CityDetailsViewModel(SelectedItem);
CityDetailsWindow.Show();
}
CittyDetailsWinow:
<syncfusion:ChromelessWindow
x:Class="Travel.Views.CittyDetailsWinow"
...
>
<Grid>
<TextBlock Text="{Binding SelectedItem.city}" Background="Gray" Width="200" Height="50" FontSize="20" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
</syncfusion:ChromelessWindow>
If the response is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.