为了账号安全,请及时绑定邮箱和手机立即绑定

使用INotifyPropertyChanged的竞争条件-C#

使用INotifyPropertyChanged的竞争条件-C#

C#
侃侃无极 2021-04-14 21:18:00
我的情况:有两个具有绑定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 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信