2013-05-26 82 views
1

我:的SelectedItem中的ObservableCollection

<DataTemplate x:Name="_ComboBoxTemplate" x:Key="_ComboBoxTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
       <TextBlock VerticalAlignment="Center" Text="{Binding}" FontSize="24"/> 
      </StackPanel> 
     </StackPanel> 
    </StackPanel> 
</DataTemplate> 

<ComboBox x:Name="_criteria" ItemTemplate="{StaticResource _ComboBoxTemplate}" ItemsSource="{Binding}"/> 

在後面的代碼:

this.DataContext = new string[] { "0", "1", "2", "3", "4", "5" }; 

我如何得到它,以便在ComboBox默認SelectedItem5

+0

你有一個虛擬機綁定到視圖嗎? – DHN

回答

5

創建一個包含您的產品清單和所選的項目類:

public class ViewModel 
{ 
    public string[] Items { get; set; } 
    public string SelectedItem { get; set; } 
} 

代碼初始化它的後面,將其設置爲DataContext

DataContext = new ViewModel 
{ 
    Items = new string[] { "0", "1", "2", "3", "4", "5" }, 
    SelectedItem = "5" 
} 

兩個屬性現在綁定到你的ComboBox

<ComboBox x:Name="_criteria" 
      ItemTemplate="{StaticResource _ComboBoxTemplate}" 
      ItemsSource="{Binding Items}" 
      SelectedItem="{Binding SelectedItem}"/> 

如果你設置了雙向綁定中的值甚至會在用戶更改時自動更新。

爲什麼在標題中提到ObservableCollection

+0

最初,我有_criteria.ItemsSource = new ObservableCollection {new Criteria {...}}; ,但隨後將其更改爲字符串數組。忘了改標題。謝謝 – BBH1023

0

在設置DataContext之後,設置_criteria.SelectedIndex = _criteria.ItemsSource.Count - 1

但我會採取另一種解決方法:顛倒數組的順序。那就是,this.DataContext = new string[] { "5", "4", ... }。 「5」將是第一項,你會保持列表的順序沒有任何其他黑客。

+0

如果我嘗試在ComboBox的xaml中設置所選索引,它將不會採用除-1之外的任何值,因此ComboBox中默認不顯示任何值。 – BBH1023

+1

不在XAML中,但在後面的代碼中。在XAML中,組合框沒有任何項目,因此您無法選擇任何項目。但是一旦你設置了DataContext,ComboBox就會有項目,你可以設置所需的索引。 – gjulianm

+0

組合框確實有項目。我有他們綁定this.DataContext =新字符串[] {「0」,「1」,「2」,「3」,「4」,「5」};當我運行該程序時,我可以看到我可以選擇的下拉菜單中的所有內容。我想默認顯示「5」。沒有_criteria.ItemsSource.Count這樣的事情,所以我不能這樣設置索引。 – BBH1023

相關問題