Je pris un coup d'oeil à votre code, faites les modifications ci-dessous, et cela a fonctionné. J'ai changé la vue de droite pour avoir juste un bloc de texte pour le simplifier un peu.
MainWindow.xaml.cs (Créer un modèle de vue pour les deux vues de se lier à)
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
public static ProtoViewModel MainViewModel = new ProtoViewModel(Repository.GetContinents());
}
LeftSideView.xaml.cs (définir le contexte de données de ce point de vue être le modèle de vue et mettre à jour sélectionné ville du modèle de vue lorsque changé)
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 (régler la vue du côté droit d'utiliser le même modèle de vue)
public partial class RightSideView
{
public RightSideView()
{
InitializeComponent();
this.DataContext = MainWindow.MainViewModel;
}
}
Dans le RightSideView.xaml, je viens de mettre la zone de texte qui est indiqué ci-dessous:
<TextBlock Text="{Binding SelectedCity.Details.City.Name}"/>
Quand une ville sur la vue de gauche est sélectionné, il sera changé la ville sélectionnée sur le modèle de vue, par conséquent, il sera mis à jour le nom de la ville sélectionnée dans la vue de droite.
Voici ce que la classe ProtoViewModel ressemblait à:
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;
}
je partage les fichiers modifiés avec vous, mais je ne sais pas comment faire :)
Pourriez-vous marquer cela avec la langue appropriée? Aussi, si possible, pourriez-vous poster juste l'extrait pertinent, il serait plus facile de jeter un coup d'oeil rapide. – tylermac
Merci pour votre réponse, Je ne savais pas combien d'extrait de mettre it.Sorry. J'ai commencé à les mettre et le poste est devenu si long.Je vais le marquer.J'ai MVVM et pensé approprié. – user9969