2016-02-04 4 views
0

Я хочу, чтобы Text был изменен в моем ComboBox для изменения на основе SelectedItemDataGrid. Я пробовал код-сзади и в XAML и добрался до этого;ComboBox Text not Binding to DataGrid SelectedItem

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

однако Text еще не меняется при выборе другой элемент из DataGrid. Как я могу правильно связать ComboBox?

EDIT: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 
} 
+0

набор в 'Text = "{Binding SelectedItem.EmployeeName, ElementName = contactsDataGrid, Режим = TwoWay}"' – StepUp

+0

это MVVM или код-позади? положите, пожалуйста, ваш код заполнения 'DataGrid' и' ComboBox' 'DataGrid' – StepUp

+0

' ComboBox' не заполнен, у него есть только два элемента, в которые я жестко код. Я добавил код для 'DataGrid' хотя я думаю, что это не связано ... – CBreeze

ответ

0

Binding.Mode Property - gets or sets a value that indicates the direction of the data flow in the binding.

Попробуйте установить в TwoWay так:

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

As MSDN says:

TwoWay. Вызывает изменения свойства источника или целевого объекта , чтобы автоматически обновлять другое. Этот тип привязки - , подходящий для редактируемых форм или других полностью интерактивных пользовательских интерфейсов. .

Update:

YourModel:

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

CodeBehind:

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> 
+0

Все еще не удача, к сожалению, кроме того, я действительно хочу «OneWay», чтобы «DataGrid» не обновлялся об изменении «ComboBox». – CBreeze

+0

@CBreeze см. Мой обновленный ответ – StepUp

+0

@CBreeze не стесняйтесь задавать любые вопросы – StepUp

Смежные вопросы