为什么我的组合框无法绑定到<string>视图模型中的列表?可湿性工作基金会



我的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}" />

前三个CBs绑定到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方法的右括号处放置一个断点,condition似乎填充了所有字符串。当我转到XAML时,当我将鼠标悬停在ItemsSource属性上时,所有字符串都会出现。但是当我运行它时,组合框是空的。调试这个问题的下一步是什么?

当前绑定的Conditions属性不返回ItemsSource属性所需的IEnumerable

您应该绑定ConditionsModelConditionslist属性:

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

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

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

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

最新更新