2015-07-16 7 views
-4

Привет, поэтому у меня есть datagrid с двумя столбцами. Это выглядит, как показано ниже:DataGrid TemplateClumn ComboBox ItemsSource и SelectedValue

<DataGrid ItemsSource="{Binding MyCollection}"> 
<DataGrid.Columns> 
    <DataGridTextColumn Width="85*" Header="Team Name" Binding="{Binding TeamName}"/> 
    <DataGridTemplateColumn Header="Prefix"> 
     <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
          SelectedValue="{Binding Prefix}"> 
//SelectedValue="{Binding Prefix}" - this is not working i also tried SelectedItem 

       </ComboBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 
</DataGrid.Columns> 

Как вы можете видеть, у меня есть DataGridTemplateColumn с ComboBox. Я привязал ComboBox ItemsSource к коллекции, которая содержит некоторые фиксированные значения. Теперь я хочу привязать SelectedValue ComboBox к свойству префикса MyClass (это DataContext моего DataGrid). Но поскольку я установил ItemsSource этого ComboBox в другую коллекцию, это связывание не работает, я думаю, что datacontext изменился. Ниже приведен класс, который является DataContext для DataGrid:

public class MyClass 
{ 
    public string TeamName{get;set;} 
    public string Prefix{get;set;} 
} 
// DataGrid.DataContext is ObservableCollection<MyClass> 

Так коллекция AllowedPrefixes правильно показано в ComboBox, но префикс Свойс не обновляется. Как я должен правильно привязать это выделение?

EDIT.

Пожалуйста, обратите внимание, что ComboBox ItemsSource отличается collecetion, чем тот, я хочу, чтобы обновить с SelectedValue

EDIT.

Я думаю, что это не работает, потому что я установил ComboBox ItemsSource в другую коллекцию. Я пытался, как показано ниже, но безуспешно:

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
             SelectedValue="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridTextColumn}}, Path=DataContext.Prefix, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
+1

добавьте ошибку или описание, как он не работает – Breeze

+0

Вы, вероятно, хотите использовать 'SelectedItem', не 'SelectedValue' - http://stackoverflow.com/questions/4902039/difference-between-selecteditem-selectedvalue-and-selectedvaluepath – Michael

+0

Нет ошибки, это просто не обновление свойства префикса viemodels. Выбранный элемент ничего не изменит. – MajkeloDev

ответ

0

Ok так что несмотря на все вы - люди, которые не знали ответа, и DownVoted меня без объяснения. Я нашел решение. Я отправляю его ниже кто-то может использовать его в будущем, я должен был установить NotifyOnTargetUpdated истину:

<ComboBox 
    SelectedItem="{Binding Prefix, NotifyOnTargetUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}"> 
0

Попробуйте следующее за ComboBox:

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},Path=DataContext.AllowedPrefixes}" 
      SelectedValue="{Binding DataContext.Prefix, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}, UpdateSourceTrigger=PropertyChanged}"> 

Если DataGrid находится внутри UserControl, а не Windows Измените AncestorType на UserControl

+0

Я думаю, вы пропустил меня. Мой источник данных Datagrid - ObservableCollection , где MyClass содержит префикс свойства. Поэтому мой пользовательский элемент управления DataContext не имеет префикса свойств – MajkeloDev