以编程方式使用SelectedValue WPF

时间:2017-03-28 10:11:33

标签: wpf

我有一个通过Datasource(Datatable)加载的组合框。在一个场景中,我希望组合框加载所需的值,我将传递给combobox1.SelectedValue = custId(说它是客户详细信息)。 custID在XAML中设置为SelectedValuePath。当我设置它时,我得到一个null异常。我缺少什么?

我的XAML:

<ComboBox Height="23" HorizontalAlignment="Left" Margin="332,42,0,0" Name="cmbCustomerName" VerticalAlignment="Top" Width="240" IsEditable="True" DisplayMemberPath="customername" SelectedValuePath="custid" ItemsPanel="{StaticResource cust}" SelectionChanged="cmbCustomerName_SelectionChanged" AllowDrop="True" FontWeight="Normal" Text="--Select a Customer Name--" IsSynchronizedWithCurrentItem="True" />

更新

C#代码:

public customer(int custid)
{
   InitializeComponent();
   cmbcustomer.SelectedValue= custid.ToString();
}

private void cmbCustomerName_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
      cmbcustid.SelectedValue= cmbcustomer.SelectedValue;
    }

4 个答案:

答案 0 :(得分:0)

selectedValue在这种情况下不起作用,您应该使用selectedItem,例如:

combobox1.SelectedItem =“custId”;

combobox1.Text =“custId”;

combobox1.SelectedIndex = combobox1.Items.IndexOf(“custId”);

combobox1.SelectedIndex = combobox1.FindStringExact(“custId”)

答案 1 :(得分:0)

我会建议你一个方法

  

这是hackish。这是糟糕的编码格式。

// Remove the handler
cmbcustomer.SelectionChanged -= cmbCustomerName_SelectionChanged;
// Make a selection...
cmbcustomer.SelectedIndex = combobox1.Items.IndexOf(custid.ToString()); //<-- do not want to raise
// SelectionChanged event programmatically here
// Add the handler again.
cmbcustomer.SelectionChanged += cmbCustomerName_SelectionChanged;

作为临时解决方案,您可以试试这个

答案 2 :(得分:0)

等待访问ComboBox es的任何属性,直到它们被加载为止:

private void cmbCustomerName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(cmbcustid != null && cmbcustid.IsLoaded && cmbcustomer != null && cmbcustomer.IsLoaded)
        cmbcustid.SelectedValue = cmbcustomer.SelectedValue;
}

答案 3 :(得分:0)

我通过在combox_loaded事件中分配值来解决问题,因为组合框刚刚在构造函数中初始化,但它没有从数据源加载。