【发布时间】:2016-03-14 14:35:39
【问题描述】:
我迷路了... 我检查了我能想到的一切..
- DataContext 已设置!
- DebugOutputWindow 中没有 BindingErrors
- INotifyPropertyChanged 已正确实现(因为 Button-Clicks 工作...)
- 集合已更新(计数 > 0)
但是我的 ComboBox 中的项目没有显示出来。
这里还有什么问题?
这是我的代码:
private void Refresh(bool isAuto)
{
List<DatabaseEntry> entries = GetBrokenJobs(isAuto);
Collection.Clear();
foreach (string jobName in entries.Select(x => x.Description).ToList())
{
Collection.Add(jobName);
}
}
我正在绑定一个 ComboxBox:
ItemsSource="{Binding Path=Collection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
private ObservableCollection<string> _collection = new ObservableCollection<string>();
public ObservableCollection<string> Collection
{
get {return _collection; }
set
{
_collection = value;
OnPropertyChanged();//<= Has [CallerMemberName] in constructor ...
}
}
我像往常一样设置 DataContext ..
this.DataContext = MainViewModel.Instance;
由于我所有的按钮和复选框都可以工作,所以这可能不是原点..
编辑
这里还有一些 Xaml
<ComboBox x:Name="ComboBox"
Grid.Row="1"
Margin="10"
Grid.Column="1"
Width="230"
VerticalContentAlignment="Center"
HorizontalContentAlignment="Center"
IsEnabled="{Binding Path=IsJobSelectorEnabled, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding Path=SelectedJobItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Path=Collection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
【问题讨论】:
-
请在运行时使用 Snoop 检查您的 DataContext 和 Bindings。并请删除 Mode=TowWay 和 UpdateSourceTrigger - 绑定到 ItemsSource 没有意义
-
奇怪的是:我有复选框,它们可以工作,同一个视图模型上带有命令的按钮也可以。 DataContext 设置为 100%...
-
没有 xaml 的一无所知
-
Collection.Add 不会触发 Collection 的 setter。在您完成迭代 for 循环以添加项目后,调用 on property changed for Collection 并查看是否使它们显示。
-
@TravisSapp 集合是一个 ObservableCollection。 Clear 和 Add 已经在触发 CollectionChanged 事件。