我有:
<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" };
我如何获取它以使SelectedItem
中的默认ComboBox
为5
?
答案 0 :(得分:6)
创建一个包含项目列表和所选项目的类:
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}"/>
如果为SelectedItem
设置双向绑定,DataContext
中的值甚至会在用户更改时自动更新。
为什么在标题中提到ObservableCollection
?
答案 1 :(得分:0)
在设置DataContext之后,设置_criteria.SelectedIndex = _criteria.ItemsSource.Count - 1
。
但我会采用另一种解决方法:颠倒数组的顺序。也就是this.DataContext = new string[] { "5", "4", ... }
。 “5”将是第一个项目,你将保持列表的顺序,没有任何其他黑客。