听起来您正在尝试像使用 WinForms 一样使用它。WPF 是一个稍微不同的野兽,并且在绑定方面更强大。
我建议阅读一些关于 MVVM 的内容,以便从 WPF 中获得最大收益。通过将 XAML 绑定到视图模型类(而不是尝试在 Code-behind 中进行连接),您会发现您可以以更大的灵活性完成您想要的事情,而无需大量代码。
例如:给定以下虚拟机:
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 绑定的起点。