Я хочу решить проблему Master -> Detail с моим проектом Caliburn.Micro + wpf.
У меня есть два comboboxes
, закодированные так в TaskManagerView.xaml :
<ComboBox x:Name="ProjectsList" SelectedValuePath="{Binding Path=SelectedProjectsList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox x:Name="TasksList"/>
Первый Combobox ProjectsList
работает нормально, я могу получить то, что хочу.Второе немного сложнее.Я получаю SelectedProjectList
правильно (пока я отлаживаю кнопку, я вижу, что я выбираю).ProjectsList
- это названия проектов из класса new Project()
.В Project
я храню список Task
.Но когда я хочу заполнить TasksList
, я получаю исключение.
Теперь мой TaskManagerViewModel :
class TaskManagerViewModel : Screen //constructor of ViewModel
{
public BindableCollection<string> ProjectsList { get; set; } //first CB
public BindableCollection<string> TasksList { get; set; } //secondCB
public string SelectedProjectsList { get; set; }//selected item from first combobox
public TaskManagerViewModel(FakeData context) //constructor
{
this.context = context;
//it works fine, i get Project.Name here from List<Project>
ProjectsList = context.GetProjectsName();
//i selected project name from combobox,
//now i want to get tasks stored in List<Project>
//where SelectedProjectsList == Project.Name
tasks = context.GetProjectsTasks(SelectedProjectsList);
foreach (Task task in tasks)
{
TasksList.Add(task.TaskName);
NotifyOfPropertyChange(() => TasksList);
}
}
public void CancelButton() => TryClose();
private FakeData context;
private List<Task> tasks;
}
У меня вопрос, где и как функция помощника кодадля получения List<Task>'s
имен?Я знаю, что я сделал здесь плохо, потому что я делаю все в construcotr ViewModel, но я хочу показать вам, что я хочу сделать.
Сейчас я получаю NullReferenceException
, потому что SelectedProjectsList
является нулевым,Как увеличить событие на выбранном элементе из ComboBox
?Я выбираю название проекта и сразу хочу получить задачи из выбранного проекта (я знаю, что могу сделать это легко с помощью кнопки, но это не то, чего я хочу достичь)
Спасибо за любые советы!
Редактировать:
Конечно, если я отредактирую виртуальную машину для этой формы:
class TaskManagerViewModel : Screen
{
public BindableCollection<string> ProjectsList { get; set; }
public BindableCollection<string> TasksList{ get; set; }
public string SelectedProjectsList { get; set; }
public TaskManagerViewModel(FakeData context)
{
this.context = context;
ProjectsList = context.GetProjectsName();
TasksList = new BindableCollection<string>();
//i moved initializing new combobox to AcceptButton()
}
public void AcceptButton()
{
//initializing tasks list on button click
tasks = context.GetProjectsTasks(SelectedProjectsList);
TasksList = new BindableCollection<string>();
foreach (Task task in tasks)
{
TasksList.Add(task.TaskName);
NotifyOfPropertyChange(() => TasksList);
}
}
public void CancelButton() => TryClose();
private FakeData context;
private List<Task> tasks;
}
Что я хочу сделать, это выбрать элемент из первого списка со списком задач и список задач в секундупоявляется.Я не хочу выбирать элемент из первого списка, нажмите на кнопку, а затем выберите элемент из второго списка