在窗口启动时以编程方式设置数据绑定的组合框

时间:2015-04-06 22:59:45

标签: c# wpf xaml combobox

还有其他相关内容,但没有任何内容符合我的情况,以编程方式设置所选值。

我有一个带有组合框的WPF窗口,作为该窗口的输入,我有一个ID值,对应于这个数据绑定组合框中的值。我已经尝试了几种方法来设置combobox.SelectedItem或combobox.SelectedIndex等,每次都没有改变值。看得更深,因为我在调用InitializeComponent()之后从窗口构造函数执行此操作。不幸的是,combobox.Items没有填充,因此Items列表的计数为0.绑定正确发生,但显然它不会在窗口构造函数完成之后连接起来。

这是组合框的修剪下来的xaml:

<ComboBox Name="Combobox_cmb" Grid.Column="0" Grid.Row="0"  ItemsSource="{Binding Path=Names}" DisplayMemberPath="Name" SelectedValuePath="Name" SelectionChanged="Name_cmb_SelectionChanged" />

当然&#34;姓名&#34;是一个可观察的列表,在尝试设置所选值之前加载。即使填充了后端列表,如果在填充列表之后和设置所选值之前查看Combobox_cmb.Items,则Combobox_cmb.Items为空。

有没有办法将值传递给窗口并且组合框默认为该项?

谢谢

1 个答案:

答案 0 :(得分:1)

您是否尝试过在Window.Loaded事件中执行此操作?试着这样做:

public YourWindow()
{
   InitializeComponent();
   this.Loaded += Window_Loaded;
   this.Datacontext = viewmodel // if you'r going with MVVM
}

public void Window_Loaded(object sender, RoutedEventArgs e)
{
   Combobox_cmb.ItemsSource = ((Viewmodel)this.DataContext).Names; //Names should be in your viewmodel if you're going with MVVM. If not just use DataContext as this codebehind and place the list here.
}

不知道这是否有助于我无法将答案置于语境中。也许提供更多的代码。