2013-09-02 3 views
1

У меня есть приложение WPF, которое содержит datagrid. Datagrid привязан к моему объекту OrderBlock, который содержит список типов Orders.DataGridComboBoxColumn Связывание со списком <String>

<DataGrid DataContext="{Binding OrderBlock}" 
        Name="dataGridOrdersGood" 
        ItemsSource="{Binding Orders}" 

Это прекрасно работает и хорошо отображает мои данные. В моем списке есть одно свойство (StatusGood), хотя я хотел бы отображать его как выпадающее поле, где могут быть только два значения: «Отправить» или «Удержать».

Так что я пытался привязать значения combobox к списку StatusList, как показано ниже. Затем попытка привязать фактическое значение к моему объекту.

public class ViewModel : INotifyPropertyChanged 
{ 
    public List<string> StatusList; 

    // constructor 
    public ViewModel() 
    { 
     StatusList = new List<string>(); 
     StatusList.Add("Hold"); 
     StatusList.Add("Send"); 
    } 
} 

<DataGridComboBoxColumn Header="Status Good" SelectedItemBinding="{Binding StatusList}" SelectedValuePath="{Binding StatusGood}"/> 

Однако ничего не отображается, кроме пустого поля. Я не понимаю, почему, по крайней мере, мой combobox не показывает ценность моего объекта? Я предоставляю список, так что я не понимаю, почему он ничего не показывает.

Я новичок в WPF и должен бороться, чтобы понять это. Я ссылался, но явно не совсем понял. http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcomboboxcolumn.aspx

Любая помощь будет замечательной! Спасибо, M

ответ

0

У меня есть решение, где ваш Список является ComboBoxItem, возможно ли это?

Вот мой пример XAML:

<DataGrid AutoGenerateColumns="False" Name="myGridTest"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Text" Binding="{Binding MyText}" /> 
     <DataGridTemplateColumn Header="Combobox"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ComboBox SelectedIndex="0" ItemsSource="{Binding ComboList}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

Мой C# -класс

public class Test 
{ 
    private string _MyText; 
    private IList<ComboBoxItem> _ComboList; 

    public Test() 
    { 
     _MyText = "Test 123"; 

     _ComboList = new List<ComboBoxItem>(); 

     _ComboList.Add(new ComboBoxItem() { Content = "Next", IsSelected = true }); 
     _ComboList.Add(new ComboBoxItem() { Content = "Prev." }); 
    } 

    public IList<ComboBoxItem> ComboList 
    { 
     get { return _ComboList; } 
     set { _ComboList = value; } 
    } 

    public string MyText 
    { 
     get { return _MyText; } 
     set { _MyText = value; } 
    } 
} 

И для тестирования:

List<Test> cList = new List<Test>(); 
    cList.Add(new Test()); 
    cList.Add(new Test()); 
    cList.Add(new Test()); 
    cList.Add(new Test()); 
    cList.Add(new Test()); 

    myGridTest.ItemsSource = cList; 

Я надеюсь, что это поможет вам ...

1

Похоже, DataGridComboBoxColumn- > SelectedItemBinding должен быть в вашем случае:

SelectedItemBinding="{Binding StatusGood}" 

и вы должны установить также ItemsSource свойство DataGridComboBoxColumn и измените ViewModel для обеспечения значения комбо использовать свойство (StatusList) вместо поля.

VM:

public class ViewModel 
{ 
    public List<string> StatusList { get; set; } 

    // constructor 
    public ViewModel() 
    { 
     StatusList = new List<string>(); 
     StatusList.Add("Hold"); 
     StatusList.Add("Send"); 
    } 

} 

XAML:

<DataGrid.Resources> 
     <local:ViewModel x:Key="ComboItems" /> 
</DataGrid.Resources> 

<DataGridComboBoxColumn SelectedItemBinding="{Binding StatusGood}" ItemsSource="{Binding Path=StatusList, Source={StaticResource ComboItems}}" > 
Смежные вопросы