问题
I want to solve Master -> Detail problem with my Caliburn.Micro + wpf project.
I have two comboboxes coded like this in TaskManagerView.xaml:
<ComboBox x:Name="ProjectsList" SelectedValuePath="{Binding Path=SelectedProjectsList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox x:Name="TasksList"/>
The first Combobox ProjectsList works ok, i can get what i want to. Second is a little complicated. I get SelectedProjectList correctly (while im debuging on button i see what i choose). ProjectsList are the name of projects from new Project() class. In Project i store list of Task. But when i want to fill TasksList, i get exception.
Now, my 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;
}
My question is, where and how code helper function for getting List<Task>'s names? I know that i done here is bad because i do everything in construcotr of ViewModel but i want to show u, what i want to do.
For now, i getting NullReferenceException, because SelectedProjectsList is null. How to rise up event on selected item from ComboBox? I choose project name and i immediately want to have tasks from choosen project (i know i can do it from button easily but its not what i want to achive)
Thanks for any advices!
Edit:
Of course if i edit VM to this form:
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;
}
What i want to do is choose item from first combobox and immidietly tasks list in second shows up. I dont want to Choose item from first combobox, click on button and then choose item from second combobox
来源:https://stackoverflow.com/questions/53706176/caliburn-micro-wpf-and-two-comboboxes