Я посмотрел ваш код, внес изменения, показанные ниже, и это сработало. Я изменил вид справа, чтобы просто иметь текстовый блок, чтобы немного упростить его.
MainWindow.xaml.cs (Создать модель представления для привязки к обоим видам)
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
public static ProtoViewModel MainViewModel = new ProtoViewModel(Repository.GetContinents());
}
LeftSideView.xaml.cs (установите контекст данных этого представления как модель представления и обновите выбранный город модели представления при изменении)
public partial class LeftSideView
{
public LeftSideView()
{
InitializeComponent();
this.DataContext = MainWindow.MainViewModel;
}
/// <summary>
/// Update the selected city of the view model
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnTreeSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
(this.DataContext as ProtoViewModel).SelectedCity = e.NewValue as CityViewModel;
}
}
RightSideView.xaml.cs (установите правый боковой вид для использования той же модели вида)
public partial class RightSideView
{
public RightSideView()
{
InitializeComponent();
this.DataContext = MainWindow.MainViewModel;
}
}
В RightSideView.xaml я просто поместил текстовое поле, показанное ниже:
<TextBlock Text="{Binding SelectedCity.Details.City.Name}"/>
Когда выбран город на левом виде, он меняет выбранный город на модели вида, поэтому обновляет название выбранного города на правом виде.
Вот как выглядел класс ProtoViewModel:
public class ProtoViewModel : Core.ViewModelBase
{
public ProtoViewModel(IEnumerable<ContinentInfo> continents)
{
Continents =
new ReadOnlyCollection<ContinentViewModel>(
(from continent in continents
select new ContinentViewModel(continent)).ToList());
}
public ViewModels.CityViewModel SelectedCity
{
get { return selectedCity; }
set
{
if(selectedCity != value)
{
selectedCity = value;
OnPropertyChanged("SelectedCity");
}
}
}
private ViewModels.CityViewModel selectedCity;
public ReadOnlyCollection<ContinentViewModel> Continents
{
get { return continents; }
set
{
if (continents != value)
{
continents = value;
OnPropertyChanged("Continents");
}
}
}
private ReadOnlyCollection<ContinentViewModel> continents;
}
Я хотел бы поделиться с вами измененными файлами, но я не уверен, как это сделать:)