使用INotifyPropertyChanged的竞争条件-C#

我的情况:有两个具有绑定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属性。


如何在没有比赛条件的情况下解决此问题?


侃侃无极
浏览 107回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP