WinFormsと同じように使用しようとしているようです。WPFはわずかに異なる獣であり、バインディングに関してはるかに強力です。
WPFを最大限に活用するには、MVVMについて少し読むことをお勧めします。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バインディングの調査を開始するための出発点となるはずです。