为什么我的组合框无法绑定到我的 ViewModel 中的 List<string>? WPF

Why is my combobox failing to bind to my List<string> in my ViewModel? WPF

我的 XAML 中有四个组合框。它看起来像这样:

 <ComboBox Grid.Row="2" ItemsSource="{Binding VehiclesAvailable}"  DisplayMemberPath="FleetNumber"/>
 <ComboBox Grid.Row="3" ItemsSource="{Binding Employees_VehicleEligible}" DisplayMemberPath="FullName"/>
 <ComboBox Grid.Row="4" ItemsSource="{Binding Jobsites}" DisplayMemberPath="Name"/>
 <ComboBox Grid.Row="5" ItemsSource="{Binding Conditions}" SelectedItem="{Binding SelectedCondition}" />

前三个 CB 绑定到 ObservableCollection 属性,这些工作正常。 最后一个绑定了List,不显示任何内容

在 VM 中,我声明 属性 并在 LoadInitialData 命令中设置它的值。

    //PROPERTIES
    public ObservableCollection<VehicleModel> VehiclesAvailable { get; set; }
    public ObservableCollection<EmployeeModel> Employees_VehicleEligible { get; set; }
    public ObservableCollection<JobsiteModel> Jobsites { get; set; }
    public ConditionsModel Conditions { get; set; }
    public GenericCondition SelectedConditionOut { get; set; }
    public string SelectedCondition { get; set; }

    //COMMANDs
    public RelayCommand<object> LoadIntialDataCommand { get; set; }

    //METHODS
    public async void LoadInitialData(object e)
    {
        var vehiclesAvailable = await GetData.VehiclesAvailableQueryAsync();
        foreach (VehicleModel _vehicle in vehiclesAvailable)
            VehiclesAvailable.Add(_vehicle);
        var employees_VehiclesEligible = await GetData.Employees_VehiclesEligibleQueryAsync();
        foreach (EmployeeModel _employee in employees_VehiclesEligible)
            Employees_VehicleEligible.Add(_employee);
        Conditions = new ConditionsModel();
    } 

为了它的价值,这是我定义 ConditionsModel 的地方:

 class ConditionsModel
    {
        private List<string> _conditions;

        public List<string> Conditions
        {
            get { return new List<string>() { "New", "Excellent", "Good", "Fair", "Poor", "Unacceptable" }; }
            set { _conditions = value; }
        }

当我单步执行代码时,在 LoadInitialData 方法的右括号处放置一个断点,Conditions 似乎填充了所有字符串。当我转到 XAML 时,果然,当我将鼠标悬停在 ItemsSource 属性 上时,所有字符串都会出现。但是当我 运行 它时,组合框是空的。调试此问题的下一步可能是什么?

您的绑定似乎是 ConditionsModel 而不是 ConditionsModel.Conditions 属性。 除此之外 ObservableCollection 将在更新时触发 NotifyPropertyChange 事件,而标准 List 不会。

RelayCommand 触发,您的 LoadInitialData(...) 函数将在创建并显示视图后调用。如果您已经在 ViewModel 构造函数中创建并填充了 Conditions,那么您可能会看到一些值。

在这种情况下,您最好使用 ConditionsViewModel Conditions 而不是 ConditionsModel Conditions 属性,其中 ConditionsViewModel 使用 ObservableCollection<string> Conditions 然后绑定到 ConditionsViewModel.Conditions

您当前绑定的 Conditions 属性 没有 return IEnumerable ItemsSource 属性 .

您应该绑定到 ConditionsModelConditions 列表 属性:

<ComboBox Grid.Row="5" ItemsSource="{Binding Conditions.Conditions}" 
          SelectedItem="{Binding SelectedCondition}" />