首页 > 解决方案 > DataGridComboBoxColumn 不更新/存储数据

问题描述

所以,我正在尝试实现一个 ComboBoxColumn,但它不像我编辑其他元素时那样保存数据。我可以在运行期间选择 ComboBox 内的元素,但它没有被保存。即使对其他行进行排序也会使 ComboBox 再次为空。

XAML:

...

<DataGridComboBoxColumn x:Name="ColSID" Header="Guild"
                        SelectedValueBinding="{ Binding Guilds, Mode=TwoWay }"
                        ItemsSource="{Binding Guilds}"
                        SelectedValuePath="SID"
                        DisplayMemberPath="Name" 
                        CanUserSort="False" />
...

这是公会类:

public class Guild
{
    public string SID { get; set; }
    public string Name { get; set; }
}

通过以下方式初始化:

Guilds = new List<Guild>();
Guilds.Add(new Guild { SID="1", Name="Test Server x1" });
Guilds.Add(new Guild { SID="2", Name="Test Server x2" });
ColSID.ItemsSource = Guilds;

一旦单元格发生更改,DataTable 就会存储到 JSON 文件中:

DataTable dt = ((DataView)senderDataGrid.ItemsSource).ToTable();
using (StreamWriter file = File.CreateText(filename))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, dt);
}

标签: c#wpfc#-4.0datagriddatagridcomboboxcolumn

解决方案


DataTable如果(即 的ItemsSourcesenderDataGrid有一个名为“Guilds”的列接受一个string值,则您的绑定应该可以工作:

SelectedValueBinding="{Binding Guilds, Mode=TwoWay}"

所选择的SID将存储在指定的SelectedValueBinding列中,当然前提是确实有这样的列DataTable

如果它不起作用,您应该将“Guilds”更改为列中的实际名称DataTable或添加列。


推荐阅读