如何在WPF中绑定到一个可观察集合中的列表

本文关键字:一个 观察 集合 列表 WPF 绑定 | 更新日期: 2023-09-27 18:05:41

我有一个类,它有两个公共变量一个字符串和一个自定义类的列表。

我已经设置了绑定,它对字符串很有效,但我不能让它绑定到列表。

背后的代码
public class RegKey
{
    public string Name { get; set; }
    public List<CEKeys> Key = new List<CEKeys>();
}
public class CEKeys
{
    public string Path { get; set; }
    public string KeyName { get; set; }
    public string Value { get; set; }
    public string Type { get; set; }
}

XAML

<DataGrid x:Name="dgRegKeys" Margin="0,0,0,40" ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Foreground="Black" Width="60" Header="Name" Binding="{Binding Name, Mode=TwoWay}" IsReadOnly="True" />
        <DataGridTextColumn Foreground="Black" Width="140" Header="Value"  Binding="{Binding Path=Key.Value, Mode=TwoWay}" IsReadOnly="False"/>
        <DataGridTextColumn Foreground="Black" Width="140" Header="Type"  Binding="{Binding Path=Key.Value, Mode=TwoWay}" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

如何绑定到CEKeys列表,同时使值可编辑?一旦值被确认,我将创建列出的键。

在输入这个的时候,我遇到了第二个问题。每个regkey都有一个List of Keys。这是因为RegKey可能需要设置多个密钥才能正常工作。如何显示列表中的所有键?

如何在WPF中绑定到一个可观察集合中的列表

列表是一个字段而不是属性,你只能绑定属性,你需要使用:

public class RegKey
{
   public string Name { get; set; }
   public List<CEKeys> Key { get; set; }
   public RegKey()
   {
        Key = new List<CEKeys>();
   }
}

如果你想把这个添加到列表中,你可以很容易地做到:

public class RegKey
    {
        public string Name { get; set; }
        public List<CEKeys> Key = new List<CEKeys>();
        Dictionary<string, List<CEKeys>> dictionary = new Dictionary<string, List<CEKeys>>();
        public RegKey()
        {
            Key = new List<CEKeys>();
            dictionary.Add(Name, Key);
        }
    }