Teks yang dimasukkan di WPF DatagridTextboxColumn dan nilai yang dipilih di DatagridComboboxColumn tidak ditampilkan saat fokus hilang

Pertanyaan saya mungkin tampak berulang karena ada pertanyaan serupa di StackOverflow seperti,

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

tetapi saya tidak dapat menemukan jawaban yang berkaitan dengan kebutuhan saya.

Saya membuat datagrid WPF secara dinamis yang mengambil kolom dari file metadata (excel) berdasarkan kondisi tertentu. Datagrid harus bersifat generik dan karenanya saya tidak dapat mengikat Datagrid itu sendiri selama pembuatan. Saya mengikat kolom DatagridCombobobox secara dinamis dan bisa mendapatkan nilai di dalamnya juga.

Sekarang masalah saya adalah, setelah saya memilih nilai di DatagridCombobobox atau memasukkan teks di DatagridTextboxColumn dan kemudian pindah ke sel/baris lain, teks dan pilihan ini menghilang.

Bagaimana cara mengaktifkan sel/baris Datagrid untuk mengingat teks atau pilihan yang saya masukkan secara dinamis? Saya memeriksa jawaban pertanyaan serupa di sel DataGridComboBoxColumn tidak menampilkan teks item yang dipilih ? tetapi ini untuk datagrid statis. Karena pembuatan datagrid saya bersifat dinamis, saya tidak tahu cara menggunakan solusi ini. Mohon bantuannya. Aku terjebak dalam hal ini dan menyita banyak waktuku :(

Salam, Niranjan.

Pembuatan DataGrid Dinamis:

    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)

Kode DataGridCombobox saya serupa:

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

Nilai string ini akan ditambahkan ke string DataGrid di atas dan dikonversi ke UIElement seperti yang ditunjukkan pada kode DataGrid di atas. Saya menambahkan Datagrid saya ke ItemsControl secara dinamis:

    Me.DynamicContent.Items.Add(grdElement)

di mana DynamicContent adalah ItemsControl.

Dalam acara UserControl_Loaded, saya menemukan setiap ComboBox di Datagrid saya melalui:

    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

dimana dt adalah Datatable yang terdiri dari data yang akan dimasukkan ke ComboBox saya. Ia memiliki jalur SelectedValuePath dan DisplayMember dari kotak kombo sebagai kolom.

Saya tidak dapat mengatur SelectedItemBinding dan SelectedValueBinding untuk DatagridComboboxColumn sebelumnya karena dinamis dan bervariasi untuk ComboColumns yang berbeda. Saya tidak tahu bagaimana ini dapat diatur dalam acara yang dimuat di atas. Tolong beri tahu saya apa yang saya lakukan salah? Atau apa yang bisa dilakukan agar saya bisa mempertahankan nilai-nilai tersebut meski fokusnya hilang. Maaf jika penjelasannya panjang :(


person Adrian T    schedule 17.11.2011    source sumber
comment
Silakan posting XAML/Kode untuk ComboBox Anda. Tebakan terbaik saya adalah Anda tidak mengikat SelectedItem, SelectedIndex, atau SelectedValue sehingga pilihan Anda tidak disimpan.   -  person Rachel    schedule 17.11.2011