2015-02-05 3 views
0

Держу пари, это что-то очень просто # Обновление: Это не #, но я не нашел соломинья чисто в XAML.Комбобокс в Datagrid: Значения отсутствуют

У меня есть два объекта: А ObservableCollection с "Tasks" как ItemsSource в Datagrid. И ObservableCollectionstring s, которые должны быть значениями в combobox. Имя Task привязано к первому столбцу. Пока что так хорошо, что работает.

Теперь я хочу добавить combobox во второй столбец с некоторыми параметрами на выбор. Отбор должен быть привязан к task 's ExecutingCore.

Я думаю, что я что-то перепутал с DataGridComboBoxColumnItemsSource. Как я могу сделать это здесь, чтобы отобразить мои значения в качестве раскрывающегося списка?

<DataGrid Grid.Column="3" ItemsSource="{Binding Database.list_Tasks}" 
    HorizontalAlignment="Left" Margin="21,52,0,0" VerticalAlignment="Top" 
    Height="262" Width="205" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Task" Binding="{Binding Task_Spec_Name}"/> 
      <DataGridComboBoxColumn 
       Header="Executing core" Width="100" 
       ItemsSource="{Binding list_CoreID}" 
       SelectedItemBinding="{Binding ExecutingCore, Mode=TwoWay}"/> 
      </DataGrid.Columns> 
    </DataGrid> 

list_CoreID НЕ является собственностью Database.list_Tasks. ViewModel - DataContext.

ViewModel.Database.list_Tasks 

ViewModel.list_CoreID 

То, как это выглядит.

Update

Я попробовал решение от EagleBeak:

<DataGridComboBoxColumn 
      Header="Executing core" Width="100" 
      ItemsSource="{Binding ElementName=TasksGrid, Path=DataContext.list_CoreID}" 
      SelectedItemBinding="{Binding ExecutingCore, Mode=TwoWay}"/> 
</DataGrid.Columns> 

Но это приводит к ошибке:

ошибка: System.Windows.Data Ошибка: 2: Не удается найти руководящих FrameworkElement или FrameworkContentElement для целевого элемента. BindingExpression: Path = DataContext.list_CoreID; DataItem = NULL; целевым элементом является «DataGridComboBoxColumn» (HashCode = 20169503); предназначаться свойством является «ItemsSource» (типа «IEnumerable»)

я нашел что-то в блоге: http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/

«WPF не знает, какое FrameworkElement использовать, чтобы получить DataContext, потому что столбец не принадлежит к визуальному или логическому дереву DataGrid ».

Есть ли лучшее решение?

+0

Извините, человек. Мое решение не сработало, и внезапно я нахожусь в осаде здесь на работе. Боюсь, мне нужно отступить от обсуждения. Но, возможно, это помогает: http://stackoverflow.com/questions/2890156/how-to-bind-collection-to-wpfdatagridcomboboxcolumn – EagleBeak

+0

Нет проблем, спасибо в любом случае. Я сделал это сейчас в коде, это работает без проблем. – Andreas

+0

Эй, человек. Просто вернулась к вашей проблеме и просмотрела ссылку из блога Levesque, которую вы опубликовали. Теперь я помню, что кто-то из команды, в которой я работал, имел эту проблему несколько лет назад. И решение BindingProxy - это именно то, что мы сделали тогда. Гораздо лучше, чем код за ИМО. – EagleBeak

ответ

0

У меня также появился крест такого рода проблемы. После, как у меня есть работа вокруг него, в XAML

<wpf:DataGridComboBoxColumn 
x:Name="cboExecutingcore" 
Header="Executing core" 
SelectedItemBinding="{Binding Path =Executingcore, Mode=TwoWay}"/> 

Тогда я связать cboExecutingcore с кодом behide.

cboExecutingcore.ItemsSource = list_CoreID; 
cboExecutingcore.DisplayMemberPath = "Display Property" 
+0

Точно то, что я сделал, и насколько я знаю, единственный способ без возиться ... – Andreas

+0

Я провел больше одного дня в одном из моих дел. Но не удалось связать его с XAML. Данные сохранены правильно, но поле со списком не показывает никакого значения. – Nazmul

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