2013-10-28 59 views
0

我有下面的XAML代码:无法绑定的ObservableCollection到组合框在WPF

<UserControl.Resources> 
    <sivm:Locator x:Key="viewModelLocator" ModelType="{x:Type ViewModels:RateVSConcentrationViewModel}"/> 
</UserControl.Resources> 

<UserControl.DataContext> 
    <Binding Path="ViewModel" Source="{StaticResource viewModelLocator}"/> 
</UserControl.DataContext> 

...

<ComboBox Grid.Column="0" Grid.Row="1" Height="20" VerticalAlignment="Top" ItemsSource="{Binding Chambers}" > <!--SelectedItem="{Binding SelectedChamber}">--> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding ChamberName}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Chambers为对象的ObservableCollection包含一个名为ChamberName,我想物业显示在组合框中。

在视图模型我有以下代码:

foreach (var chamber in chambers) 
{ 
    Chambers.Add(chamber); 
} 
OnPropertyChanged(() => Chambers); 

但这个代码执行时不会更新组合框。我用这种方式做了很多数据绑定,但我无法让这个工作。

有人可以看到我在这里做错了吗?

+0

您可以检查是否有任何约束力的错误在输出窗口,当你执行你的代码 – Nitin

回答

0

您可能需要设置的RelativeSource你的文字块,尝试修改你的文本块的Text属性绑定到以下几点:

{Binding DataContext.ChamberName, RelativeSource={RelativeSource AncestorType=ComboBox}} 

正如尼特上面所说的,总是检查绑定错误,他们会把你放在正确的道路上。

0

您应该调整属性绑定如下:

<ComboBox ItemsSource="{Binding Path=ViewModel.Chambers, Source={StaticResource viewModelLocator}}" > 
+0

我已经试过这个,我喜欢我的猴子说。它似乎没有帮助。我在输出中没有出现任何绑定错误。我可以看到名为DisplayMemberPath的属性存在 - 我应该使用该文件而不是带有文本块的数据模板吗? – Diemauerdk

0

我得到它的工作这样做:

<ComboBox DisplayMemberPath="ChamberName" Grid.Column="0" Grid.Row="1" Height="20" VerticalAlignment="Top" ItemsSource="{Binding Chambers}"> <!--SelectedItem="{Binding SelectedChamber}">-->