将WPF中Combobox的SelectedIndex设置为0

时间:2012-07-16 23:30:16

标签: c# wpf

我在运行时将一个Collection绑定到一个Combobox,我想将索引设置为0.我找不到我想要的直接答案。

_stationNames = new ObservableCollection<string>(_floorUnits.Unit.Select(f => f.Name));
_stationNames.Insert(0, "All");
stationsComboBox.ItemsSource = _stationNames;
stationsComboBox.SelectedIndex = 0;//Doesn;t work

的Xaml

<ComboBox x:Name="stationsComboBox" Grid.Row="1" Grid.Column="1" Text="{Binding Name}"
                  SelectionChanged="StationComboBoxSelectionChanged" VerticalAlignment="Center" Margin="3"
                   SelectedIndex="0"/>

1 个答案:

答案 0 :(得分:1)

听起来你正试图像使用WinForms一样使用它。 WPF是一种略有不同的野兽,在绑定方面功能更强大。

我建议您在MVVM上阅读一下,以便从WPF中获得最大收益。通过将XAML绑定到视图模型类(而不是尝试在代码隐藏中进行连接),您会发现无需大量代码就可以更灵活地完成所需的任务。

例如:给定以下VM:

public class MyViewModel: INotifyPropertyChanged
{

    public ObservableCollection<string> StationNames
    {
        get;
        private set;
    }

    public Something()
    {
        StationNames = new ObservableCollection<string>( new [] {_floorUnits.Unit.Select(f=>f.Name)});
        StationNames.Insert(0, "All");
    }

    private string _selectedStationName = null;
    public string SelectedStationName
    {
        get
        {
            return _selectedStationName;
        }
        set
        {
            _selectedStationName = value;
            FirePropertyChanged("SelectedStationName");
        }
    }

    private void FirePropertyChanged(string propertyName)
    {
        if ( PropertyChanged != null )
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

您可以将视图(XAML表单)DataContext设置为ViewModel的实例,并将组合框定义更新为:

<ComboBox x:Name="stationsComboBox" Grid.Row="1" Grid.Column="1"
                  ItemsSource="{Binding Path=StationNames}" SelectedItem={Binding Path=SelectedStationName} VerticalAlignment="Center" Margin="3"
                   SelectedIndex="0"/>

每当组合框选择发生变化时,VM的SelectedStationName会更新以反映当前选择,并且从VM代码中的任何位置,设置VM的SelectedStationName将更新组合选择。 (即实现重置按钮等)

通常情况下,就像你建议的那样,我会看到直接绑定到Units集合。 (或者如果VM本身可以查看/编辑,则从单元派生。)无论如何,它应该为您提供一些起点来开始研究WPF绑定。