我的情况:有两个具有绑定SelectedItem属性的组合框。第一个组合框包含成本中心,第二个组合框包含所选成本中心的员工。这意味着如果SelectedCostcentre发生变更,INotifyPropertyChanged解雇并搜索成本中心内的所有员工。ViewModel: public abstract class SelectEmployeeViewModel : ViewModelBase{ protected readonly Plant plant; public ObservableCollection<Costcentre> Costcentres { get; protected set; } public Costcentre SelectedCostcentre { get; set; } public ObservableCollection<Employee> Employees { get; protected set; } public Employee SelectedEmployee { get; set; } public bool CostcentresEnabled { get { return Costcentres != null && Costcentres.Any(); } } public bool EmployeesEnabled { get { return Employees != null && Employees.Any(); } } protected SelectEmployeeViewModel(Window window, Page page, Plant plant) : base(window, page) { this.plant = plant; PropertyChanged += SelectEmployeeViewModel_PropertyChanged; Costcentres = mainController.CostcentreDao.GetByPlant(plant); } private void SelectEmployeeViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(SelectedCostcentre): SetEmployees(); break; } } private void SetEmployees() { if (SelectedCostcentre != null) Employees = mainController.EmployeeDao.GetByCostcentre(SelectedCostcentre); else Employees = new ObservableCollection<Employee>(); }}Xaml: <ComboBox ItemsSource="{Binding Costcentres}" SelectedItem="{Binding SelectedCostcentre}" DisplayMemberPath="DisplayName" HorizontalAlignment="Left" IsEnabled="{Binding CostcentresEnabled}" Margin="81,61,0,0" VerticalAlignment="Top" Width="213"/>这很好用。现在,我为员工建立了搜索功能,可以在所有成本中心找到他们。如果找到一个,则需要以编程方式更改SelecedCostcentre和SelectedEmployee。这不是在创造比赛条件吗?因为如果我设置该SelectedCostcentre属性将PropertyChanged触发并设置该Employees属性。如何在没有比赛条件的情况下解决此问题?
1 回答
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消