2013-12-04 2 views
0

мне нужно связать ComboBox в моем DataGrid к List<string>связать ComboBox в DataGrid к списку <string>

в списке ниже:

public static ObservableCollection<string> m_Category = 
    new ObservableCollection<string>() { "Simulation", "Materials" }; 

вот мое определение COMBOBOX:

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <Grid FocusManager.FocusedElement="{Binding ElementName= taskCombo}" > 
      <ComboBox x:Name="MyComboBox" Height="Auto" Width="Auto" 
      ItemsSource="{Binding m_Category , 
         NotifyOnTargetUpdated=True, 
         Mode=TwoWay, 
         UpdateSourceTrigger=PropertyChanged}" 
      SelectedIndex ="0" 
      SelectionChanged ="MyComboBox_SelectionChanged"/> 
     </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

i не получал никаких значений в полевых данных

+1

И в чем проблема с тем, что у вас есть сейчас? – gleng

+0

Что появляется в пользовательском интерфейсе, когда вы пытаетесь это сделать? Вы не получаете никаких значений в выпадающем списке? – liquidsnake786

+0

no values ​​в ComboBox –

ответ

0

Попробуйте thi s

<ComboBox ItemsSource="{Binding Source={x:Static MemberType=local:MyWindow, Member=M_Category}}"/> 

public partial class MyWindow : MyBaseWindow 
{ 
    public static ObservableCollection<string> m_Category = new ObservableCollection<string>() { "Simulation", "Materials" }; 
    public static ObservableCollection<string> M_Category 
    { 
     get { return m_Category; } 
    } 
    ...... 

Я надеюсь, что это даст вам представление о том, как связать статические свойства

+0

Я получаю сообщение об ошибке Свойство «MemberType» не было найдено в типе «StaticExtension». –

+0

thks я исправить это :) –

1

ObservableCollection является статическим, так что вам придется использовать другой синтаксис:

ItemsSource="{Binding Source={x:Static YourClass.m_Category} , 
        NotifyOnTargetUpdated=True, 
        Mode=TwoWay, 
        UpdateSourceTrigger=PropertyChanged}" 

Но: это тоже не сработает. Вы можете привязываться только к свойствам, а не к полям. Поэтому вам нужно создать свойство, которое я бы не стал статическим. Изменение VM, как:

public static ObservableCollection<string> m_Category = new ObservableCollection<string>() { "Simulation", "Materials" }; 
public ObservableCollection<string> Category 
{ 
    get { return m_Category; } 
} 

и привязать свой ComboBox к этой недвижимости:

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
    <Grid FocusManager.FocusedElement="{Binding ElementName= taskCombo}" > 
     <ComboBox x:Name="MyComboBox" Height="Auto" Width="Auto" 
     ItemsSource="{Binding Category}" 
     SelectedIndex ="0" 
     SelectionChanged ="MyComboBox_SelectionChanged"/> 
    </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

, конечно, это будет работать только если вы установили правильный DataContext, который вы можете наблюдать с некоторыми МОФ шпиона, как snoop

+0

Am довольно уверен Mode = TwoWay не будет работать. – ethicallogics

+0

Вы правы. Я скопировал его код сверху. 'TwoWay', поскольку ItemsSource - это бессмыслица, я сократил привязку. – Herm

+0

привет, я не работал, он всегда показывает пустое поле comboBox, у меня есть еще один столбец в моем datagrid, и его имя - категория taht, почему он работает в первый раз. –

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