Текст, введенный в WPF DatagridTextboxColumn, и значение, выбранное в DatagridComboboxColumn, не отображаются при потере фокуса

Мой вопрос может показаться повторяющимся, поскольку в StackOverflow есть похожие вопросы, например:

https://stackoverflow.com/questions/5733782/how-to-retain-value-in-datagridcomboboxcolumn-of-wpfs-datagrid

https://stackoverflow.com/questions/6101441/creating-wpf-datagrid-dynamically-with-dynamically-created-drop-down-box-using-d

но я не нашел ответа на мои требования.

Я динамически создаю сетку данных WPF, которая берет столбцы из файла метаданных (excel) на основе определенных условий. Сетка данных должна быть универсальной, и поэтому я не могу привязать саму сетку данных во время создания. Я динамически привязываю столбцы DatagridCombobobox и также могу получить в них значения.

Теперь моя проблема заключается в том, что как только я выбираю значение в DatagridCombobobox или ввожу текст в DatagridTextboxColumn, а затем перехожу к другой ячейке/строке, этот текст и выделение исчезают.

Как включить ячейку/строку Datagrid для динамического запоминания введенного текста или выделения? Я проверил ответ на аналогичный вопрос в ячейке DataGridComboBoxColumn, не отображающей текст выбранного элемента. ? но это для статической сетки данных. Поскольку мое создание сетки данных является динамическим, я не знаю, как использовать это решение. Пожалуйста, помогите. Я застрял в этом, и это занимает много моего времени :(

С уважением, Ниранджан.

Динамическое создание DataGrid:

    Dim setupGrid = "<my:DataGrid AutoGenerateColumns='False' Name='grdSetup' " & "xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'" & "  xmlns:sdk = 'http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk'" & "  xmlns:x = 'http://schemas.microsoft.com/winfx/2006/xaml'" & "  xmlns:TAB = 'http://fabtab.codeplex.com'" & "   xmlns:my='http://schemas.microsoft.com/wpf/2008/toolkit' " & " >"
    setupGrid = setupGrid & "<my:DataGrid.Columns>"
    ...
    ...
    ...
    setupGrid = setupGrid & "</my:DataGrid.Columns>"

    setupGrid = setupGrid & "</my:DataGrid>"

    Dim sr = New MemoryStream(Encoding.ASCII.GetBytes(setupGrid))
    Dim pc = New ParserContext()
    pc.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation")
    pc.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml")
    Dim grdElement As UIElement = DirectCast(System.Windows.Markup.XamlReader.Load(sr, pc), UIElement)
    Dim grdSetup As DataGrid = DirectCast(grdElement, DataGrid)

Мой код DataGridCombobox похож:

    setupGrid = setupGrid & "<my:DataGridComboBoxColumn x:Name='" & dr.Item("ParameterName").ToString.Trim & "'  Header='" & dr.Item("ParameterName") & "'  SelectedValuePath='" & dr.Item("ValueColumn") & "' DisplayMemberPath='" & dr.Item("DisplayColumn") & "'  />"

Это строковое значение будет добавлено к приведенной выше строке DataGrid и преобразовано в UIElement, как показано в приведенном выше коде DataGrid. Я добавляю свой Datagrid в ItemsControl динамически:

    Me.DynamicContent.Items.Add(grdElement)

где DynamicContent — это ItemsControl.

В событии UserControl_Loaded я нахожу каждый ComboBox в своей сетке данных через:

    Dim dynamicGrid as DataGrid = DynamicContent.ItemContainerGenerator.ContainerFromIndex(0)
    Dim comboColumns = dynamicGrid.Columns.OfType(Of DataGridComboBoxColumn)()
    For index As Integer = 0 To comboColumns.Count - 1
     comboColumns(index).ItemsSource = DirectCast(dt, IListSource).GetList()
    Next

где dt - это Datatable, который состоит из данных, которые должны быть в моем ComboBox. Он имеет путь SelectedValuePath и DisplayMember поля со списком в качестве столбцов.

Я не могу заранее установить SelectedItemBinding и SelectedValueBinding для DatagridComboboxColumn, поскольку он является динамическим и различается для разных ComboColumns. Я не знаю, как их можно установить в загруженном выше событии. Пожалуйста, дайте мне знать, что я делаю неправильно? Или что можно сделать, чтобы я мог сохранить значения даже после потери фокуса. Извините за длинное описание :(


person Adrian T    schedule 17.11.2011    source источник
comment
Пожалуйста, разместите XAML/код для вашего ComboBox. Насколько я понимаю, вы не связываете ни SelectedItem, ни SelectedIndex, ни SelectedValue, поэтому ваш выбор не сохраняется.   -  person Rachel    schedule 17.11.2011