组合框文本未绑定到 DataGrid SelectedItem

本文关键字:DataGrid SelectedItem 绑定 文本 组合 | 更新日期: 2023-09-27 18:33:23

我希望我的ComboBoxText属性根据DataGridSelectedItem而变化。我已经尝试过代码隐藏和XAML,并且已经做到了这一点;

<ComboBox Grid.Row="6" Grid.Column="1" x:Name="contactEmployeeComboBox" Text="{Binding SelectedItem.EmployeeName, ElementName=contactsDataGrid, Mode=OneWay}" Margin="5">

但是,当我从DataGrid中选择另一个项目时,Text仍然没有改变。如何正确绑定ComboBox

编辑:DataGrid

private void FillContactsDataGrid()
{
    var selectedCompany = dataGrid.SelectedItem as CompanyModel;
    var Contacts = new ObservableCollection<ContactsModel>();
    var waitWindow = new PleaseWait();
    var ContactTypes = new ObservableCollection<TypeOfContact>();
    var contactService = new ContactsDataService();
    ContactTypes = contactService.GetContactTypesDBF();
    cancelAddContactButton.Visibility = Visibility.Collapsed;
    cancelUpdateContactButton.Visibility = Visibility.Collapsed;
    var contactsDataService = new ContactsDataService();
    Contacts = contactsDataService.HandleContactSelect(companyID);           
    ContactsICollectionView = CollectionViewSource.GetDefaultView(Contacts);
    contactsDataGrid.ItemsSource = ContactsICollectionView;
    //Contacts = await ReturnContacts(Convert.ToInt32(selectedCompany.ID)); removed as tabs were jumping back to companies
}

组合框文本未绑定到 DataGrid SelectedItem

Binding.Mode 属性 - 获取或设置一个值,该值指示 绑定中数据流的方向。

尝试设置为这样的TwoWay

<ComboBox Text="{Binding SelectedItem.EmployeeName, ElementName=contactsDataGrid, Mode=TwoWay}"/>

正如MSDN所说:

双向。 导致对源属性或目标的更改 属性以自动更新另一个。这种类型的绑定是 适用于可编辑表单或其他完全交互式的 UI 场景。

更新:

您的型号:

public class YourModel
{
    public string TitleField { get; set; }    
}

代码隐藏:

    public MainWindow()
    {
        InitializeComponent();
        FillDataGrid();
    }
    private void FillDataGrid()
    {
        ObservableCollection<YourModel> coll = new ObservableCollection<YourModel>();
        for (int start = 0; start < 10; start++)
        {
            coll.Add(new YourModel(){TitleField="Title " +  
            start.ToString());                                
        }
        dataGrid.ItemsSource = coll;
        comboBox.DisplayMemberPath = "TitleField";
        comboBox.ItemsSource = coll;
    }

    private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {            
        var dataGrid = e.Source as DataGrid;
        var currentIndex = dataGrid.Items.IndexOf(dataGrid.CurrentItem);            
        comboBox.SelectedIndex= currentIndex;
    }

您的 XAML:

<StackPanel>
   <DataGrid Name="dataGrid" SelectionChanged="dataGrid_SelectionChanged" />
   <ComboBox  Name="comboBox"/>
</StackPanel>