привязка datagridcomboboxcolumn в коде

Я хотел бы сделать это полностью в коде, без XAML:

DataGridComboBoxColumn myDGCBC = new DataGridComboBoxColumn();
ObservableCollection<string> DataSource = new ObservableCollection<string>{"Option1", "Option2"};
myDGCBC.ItemsSource = DataSource;

ObservableCollection<MyStructure> MyObject = new ObservableCollection<MyStructure>;

а также

public class MyStructure
{
   ... several properties ... // pseudocode, obviously
   public string SelectedValue { get; set; }
}

Меня интересует (связывание) получение выбранных значений из всех полей со списком в столбце в свойство SelectedValue.

Я попробовал несколько идей из SO, но безрезультатно.

Помощь! Спасибо.


person Gabe    schedule 25.08.2015    source источник
comment
@Bahman_Aries, спасибо за редактирование. Опечатка при копировании с другого компьютера.   -  person Gabe    schedule 25.08.2015


Ответы (1)


Предполагая, что DataGird уже определено в xaml, вы должны установить правильные привязки как для DataGrid, так и для DataGridComboBoxColumn.

Вот пример, чтобы дать вам представление:

XAML:

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <DataGrid x:Name="myGrid" AutoGenerateColumns="False"/>
    <Button Grid.Row="1"  Content="test" Click="Button_Click"/>
</Grid>

MainWindow.cs:

    //DataGrid ItemsSource
    public ObservableCollection<MyStructure> DataSource { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;

        // Initializing DataGrid.ItemsSource
        DataSource = new ObservableCollection<MyStructure>();
        DataSource.Add(new MyStructure());

        // Creating new DataGridComboBoxColumn 
        DataGridComboBoxColumn myDGCBC = new DataGridComboBoxColumn();
        myDGCBC.Header = "cmbColumn";

        // Binding DataGridComboBoxColumn.ItemsSource and DataGridComboBoxColumn.SelectedItem
        var cmbItems = new ObservableCollection<string> { "Option1", "Option2" };
        myDGCBC.ItemsSource = cmbItems;
        myDGCBC.SelectedItemBinding = new Binding("SelectedValue");
        // Adding DataGridComboBoxColumn to the DataGrid
        myGrid.Columns.Add(myDGCBC);

        // Binding DataGrid.ItemsSource 
        Binding binding = new Binding();
        binding.Source = DataSource;
        BindingOperations.SetBinding(myGrid, DataGrid.ItemsSourceProperty, binding);
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        //This is just to check whether SelectedValue is set properly:
        string selectedValue = DataSource[0].SelectedValue;
    }
person Bahman_Aries    schedule 25.08.2015
comment
Во-первых, спасибо. Не могли бы вы сделать это без MVVM? - person Gabe; 25.08.2015
comment
На самом деле это вовсе не Mvvm! :) однако я изменил свой ответ и удалил некоторые ненужные части. Пожалуйста, посмотрите и скажите мне, полезно ли это. - person Bahman_Aries; 25.08.2015
comment
Добро пожаловать, кстати, и SelectedItemBinding, и SelectedValueBinding работают, в зависимости от необходимости. - person Bahman_Aries; 26.08.2015