2012-07-16 98 views
0

我在運行時將一個Collection綁定到一個Combobox,我想將Index設置爲0.我無法找到我想要的直接答案。將WPF中Combobox的SelectedIndex設置爲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"/> 
+0

您可以嘗試設置SelectedItem。只要看看你給我們展示了什麼,我不知道爲什麼它不起作用,但創建一個新的字符串變量「All」,將它插入到你的集合中,並將組合框選定的項目分配給該變量。 – Thelonias 2012-07-17 00:20:39

+0

我同意。創建一個單獨的屬性,表示集合中的單個項目,並將其綁定到ComboBox的SelectedItem屬性。然後將其設置爲集合中的第一個項目。 – Xcalibur37 2012-07-17 00:55:32

+0

不應該在你的XAML中需要'Text =「{Binding Name}」'。這對於'ItemsSource'的設置是多餘的,其中應該只有結果集中的單個列(字段)。我發現它也可能導致像'.SelectedIndex'沒有正確設置的問題。 – vapcguy 2016-11-07 16:19:19

回答

1

這聽起來像你想使用它就像你使用的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綁定的開始。

+0

*「關於綁定的功能更強大。」* - 含義;你將不得不編寫更多的代碼來完成同樣的事情,你可以在一行中使用WinForms:D – 2012-07-17 00:02:02

+0

謝謝,沒有其他方法可以在Codebehind中完成它。我已經擁有所有代碼隱藏的文件,所以現在很難轉換到MVVM。 – 2012-07-17 00:06:25

相關問題