ObservableCollection中的SelectedItem

时间:2013-05-26 16:25:26

标签: c# wpf xaml windows-store-apps

我有:

<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中的默认ComboBox5

2 个答案:

答案 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”将是第一个项目,你将保持列表的顺序,没有任何其他黑客。