【问题标题】:Wpf DataGrid Set Columns dynamically by list propertyWpf DataGrid通过列表属性动态设置列
【发布时间】:2020-01-14 10:01:01
【问题描述】:

我有一个带有 DataGrid 的小型 caliburn 微型 MVVM 项目。列将包含 x 数量的“设置”,行将包含“CustomRow”。我想使用 ObservableCollection ,其中 CustomRow 具有函数属性和设置属性的集合。对于此集合中的每个设置,都应存在一列,其中包含设置的值。

class CustomRow
{
    public string Function { get; set; }
    public ObservableCollection<Setup> Setups { get; set; }
}

// example class
class Setup
{
    public string Name { get; set; }
    public object Content { get; set; }
}

所以我需要能够根据 itemssource 动态添加列和行(所有 Setups 集合都将具有相同的大小)。

我的问题是我不知道如何将 Setups 属性转换为多列。 我已经花了一些时间来解决我认为应该是平凡的问题。但我错过了一些东西。 任何帮助深表感谢。

【问题讨论】:

    标签: c# wpf mvvm datagrid


    【解决方案1】:

    ItemsSource绑定或设置为ObservableCollection&lt;CustomRow&gt;,然后在视图中获取源集合中第一个CustomRowSetups属性,例如:

    private void Window_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        var vm = DataContext as YourViewModel;
        dataGrid.Columns.Clear();
        if (vm.Rows != null && vm.Rows.Count > 0)
        {
            var setups = vm.Rows[0].Setups;
            foreach (var setup in setups)
            {
                dataGrid.Columns.Add(new DataGridTextColumn { Header = setup.Name, Binding = new Binding("Content ") });
            }
        }
        dataGrid.ItemsSource = vm.Rows;
    }
    

    无法将DataGridColumns 属性直接绑定到源属性,因此您需要以一种或另一种方式自己创建列。

    您应该在视图、控件或附加到其中任何一个的附加行为中执行此操作。视图模型不应创建任何列。

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2014-12-15
      • 1970-01-01
      • 2011-04-28
      • 2014-05-30
      • 1970-01-01
      相关资源
      最近更新 更多