与ObservableCollection绑定的ComboBox

时间:2012-07-19 12:58:31

标签: c# wpf binding combobox observablecollection

我的任务是将一个组合框添加到现有的WPF表单中。我从未使用过WPF而且我很丢失,特别是在绑定和使用ObservableCollection属性时。所有的例子都与我被告知的方式完全不同。

我最初的组合框设置如下:

<ComboBox Name="GroupComboBox" Width="132" Height="22" Grid.Column="0" Grid.Row="3" Margin="0,30" VerticalAlignment="Top" >         
    <ComboBoxItem Content="Data Warehouse"></ComboBoxItem>
    <ComboBoxItem Content="KPI"></ComboBoxItem>
    <ComboBoxItem Content="Failures"></ComboBoxItem>
    <ComboBoxItem Content="All Groups"></ComboBoxItem>            
</ComboBox>

哪个效果很好。这是当我被告知我必须摆脱所有ComboBoxItem内容并将组合框绑定到ObservableCollectionGroups和ObservableCollectionSelectedGroups并且这样做时我所要做的就是将它添加到ViewModel类:

 public ObservableCollection<string> Groups { get; set; }      

 public ObservableCollection<string> SelectedGroups { get; set; }

好的,所以我将上面的内容添加到视图模型类中:

public class ClioViewModel : INotifyPropertyChanged
{
    public ObservableCollection<string> Groups { get; set; }      

    public ObservableCollection<string> SelectedGroups { get; set; }
}

(这个课程中已经有很多其他的东西了,但为了时间和空间的利益,我没有发布它。如果需要的话,我很乐意根据要求增加更多)

然后我将我的xaml改为:

<ComboBox Name="GroupComboBox" ItemsSource="{Binding Groups}" SelectedItem=" Binding  SelectedGroups, Mode=TwoWay}" Width="132" Height="22" Grid.Column="0" Grid.Row="3" Margin="0,30" VerticalAlignment="Top" >                         
</ComboBox>    

哪个不起作用。当然它不起作用!我没有在我的comboBox中列出我想要的任何项目!问题是,如果它们不属于comboBox,并且它们没有放在Group / Selected组属性中,那么它们在哪里呢?我见过的众多组合框绑定示例中没有一个看起来像我被告知要做的事情。

如果有人可以告诉我我所缺少的东西,我会非常感激。

2 个答案:

答案 0 :(得分:3)

你需要在Group集合中的某个位置添加值(在初始值设定项或我所说的类构造函数中):

Groups.Add("Data Warehouse");
Groups.Add("Data KPI");
Groups.Add("Data Failures");
Groups.Add("Data All Groups");
坦率地说,在这种情况下我没有看到这样做的意义,但它可能与你的其余代码有关。

答案 1 :(得分:2)

像大卫说的那样 - 填写你的Groups系列。第二:确保将 DataContext 设置为viewmodel的实例。你对itemssource的绑定是正确的。 SelectedItem的绑定不正确:您可以绑定到字符串属性。 Mode = TwoWay只在需要从viewmodel进行选择时才需要它。

 public string MySelectedItem
 {
   get{return this._myselecteditem;}
   set{this._myselecteditem=value; OnPropertyChanged("MySelectedItem");}
 }

XAML

  <ComboBox ItemsSource="{Binding Groups}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}"/>