Во-первых, ваше мнение не должно знать о модели.поэтому я переместил модель для просмотра модели.
Также вы должны быть осторожны с контекстом данных, так как каждое представление имеет только одно.поэтому я изменил его тип на тип модели представления контейнера, который содержит ежедневные планы.На этом этапе ваше представление NutritionPlan начинается с одного объекта NutritionPlanVM.
NutritionPlan.xaml.cs:
public partial class NutritionPlan : Page
{
public NutritionPlanVM ViewModel { get { return DataContext as NutritionPlanVM; } set { DataContext = value; } }
public NutritionPlan(Object NPlan)
{
InitializeComponent();
//ViewModel = new NutritionPlanVM(NPlan);
//or can be ViewModel = a VM selected from RootVM
}
}
Эта модель представления требует явного вызова метода LoadData для создания несколькихежедневные планы для себя.
NutritionPlanVM.cs:
public class NutritionPlanVM : DependencyObject
{
Models.NutritionPlan _NPlan;
private ObservableCollection<DailyNutritionPlanVM> _dailyPlans;
public ObservableCollection<DailyNutritionPlanVM> DailyPlans { get { return _dailyPlans; } }
public void LoadData(Models.NutritionPlan _NPlan)
{
var dnpVM = new DailyNutritionPlanVM(_NPlan.NutritionPlanId);
_dailyPlans.Add(dnpVM);
}
}
Вам нужна другая модель представления, содержащая наблюдаемую коллекцию для всех планов питания.
public class RootVM : DependencyObject
{
private ObservableCollection<NutritionPlanVM> _nutritionPlans;
public ObservableCollection<NutritionPlanVM> NutritionPlans { get { return _nutritionPlans; } }
//vm data populated in constructor
public RootVM()
{
_nutritionPlans.Add([add all nutrition plans]);
}
}
Теперь дляПри связывании root, должно быть представление, соответствующее этому RootVM.(например, MainWindow).в конструкторе этого представления вам нужно DataContext = new RootVM()
Теперь, когда все на месте, вы можете привязать к текущему выбранному элементу первого списка и использовать этот элемент для извлечения информации о модели представления:
<ListBox ItemsSource="{Binding ElementName=NutritionPlansControlListBx, Path=SelectedItem.DailyPlans}"/>