组合框文本未绑定到 DataGrid SelectedItem
本文关键字:DataGrid SelectedItem 绑定 文本 组合 | 更新日期: 2023-09-27 18:33:23
我希望我的ComboBox
的Text
属性根据DataGrid
的SelectedItem
而变化。我已经尝试过代码隐藏和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
}
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>