這聽起來像你想使用它就像你使用的WinForms。 WPF是一個稍微不同的野獸,在綁定方面更強大。
我推薦在MVVM上閱讀一下,以從WPF中獲得最大收益。通過將XAML綁定到視圖模型類(而不是試圖在Code-behind中進行聯繫),您會發現無需代碼即可實現您想要的更多靈活性。
例如:考慮以下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到視圖模型的實例,並更新你的組合框定義:
<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集合。 (或者,如果虛擬機本身可以被查看/編輯,則它們是從單元派生的)。無論如何,它應該給你一個開始研究WPF綁定的開始。
您可以嘗試設置SelectedItem。只要看看你給我們展示了什麼,我不知道爲什麼它不起作用,但創建一個新的字符串變量「All」,將它插入到你的集合中,並將組合框選定的項目分配給該變量。 – Thelonias 2012-07-17 00:20:39
我同意。創建一個單獨的屬性,表示集合中的單個項目,並將其綁定到ComboBox的SelectedItem屬性。然後將其設置爲集合中的第一個項目。 – Xcalibur37 2012-07-17 00:55:32
不應該在你的XAML中需要'Text =「{Binding Name}」'。這對於'ItemsSource'的設置是多餘的,其中應該只有結果集中的單個列(字段)。我發現它也可能導致像'.SelectedIndex'沒有正確設置的問題。 – vapcguy 2016-11-07 16:19:19