【问题标题】:WPF DataGrid binding problemWPF DataGrid 绑定问题
【发布时间】:2009-09-28 13:51:43
【问题描述】:

假设我们在 XAML 中有以下代码(数据网格绑定到 ObservableCollection,列绑定到 ObservableCollection 的属性:

<WpfToolkit:DataGrid
        ItemsSource="{Binding Path=Collection}"
        HorizontalScrollBarVisibility="Hidden" SelectionMode="Extended"
        CanUserAddRows="False" CanUserDeleteRows="False"
        CanUserResizeRows="False" CanUserSortColumns="False"
        AutoGenerateColumns="False"
        RowHeaderWidth="17" RowHeight="25">
        <WpfToolkit:DataGrid.Columns>

            <WpfToolkit:DataGridTextColumn
                Header="Names" Width="2*"
                Binding="{Binding Path=Name}"/>

        </WpfToolkit:DataGrid.Columns>
</WpfToolkit:DataGrid>

如何在 C# 中以编程方式创建一个新列,并将绑定设置为某个 PropertyPath(在我的例子中是 ObservableCollection 的属性)?

这就是我现在拥有的:

Binding items = new Binding();
PropertyPath path = new PropertyPath("Name");
items.Path = path;



MyDataGrid.Columns.Add(new DataGridTextColumn()
{
   Header = "Names",
   Width =  275,
   Binding = items
});

我很确定问题出在 PropertyPath 中,但我不知道我必须在其中写什么...

感谢您的帮助!

【问题讨论】:

    标签: c# wpf xaml binding


    【解决方案1】:

    我的代码和你几乎一模一样,只是创建绑定的方式略有不同:

    void Add(ColumnViewModel columnViewModel)
    {
        var column = new DataGridTextColumn
        {
            Header = columnViewModel.Name,
            Binding = new Binding("[" + columnViewModel.Name + "]")
        };
        dataGrid.Columns.Add(column);
    }
    

    【讨论】:

      【解决方案2】:

      我在我的程序中这样做。

      我用的是另一个datagrid和MVVM,但是思路应该是一样的。

      创建一个包含您需要的所有列的集合,然后将该集合绑定到 xaml 中的网格。

      所以在这种情况下不要在 xaml 中定义列,只在代码中。

      类似这样的:

      <WpfToolkit:DataGrid
              ItemsSource="{Binding Path=Collection}"
              HorizontalScrollBarVisibility="Hidden" SelectionMode="Extended"
              CanUserAddRows="False" CanUserDeleteRows="False"
              CanUserResizeRows="False" CanUserSortColumns="False"
              AutoGenerateColumns="False"
              RowHeaderWidth="17" RowHeight="25"
              Columns="{Binding Path=ColumnCollection}"
      />
      

      【讨论】:

      • 我在代码中定义我的列...我需要知道如何将列绑定到集合属性。在我的例子中,集合是某个包含属性的类的 ObservableCollection。
      • WPFToolkik DataGrid 不支持绑定到当前版本的列。也许很快?
      • @Jakers:事实上,支持列绑定...您可以创建一个包含属性的类的 observablecollection,并将属性绑定到列。
      • @Partial 你是对的。我说的是 datagrid 的 Columns 属性,它没有设置器,因此您无法将自己的列集合绑定到它。
      【解决方案3】:

      我的代码不起作用的原因是我没有为路径编写好的属性。 还是谢谢你的建议!

      【讨论】:

      • 也许这个答案有用,您可以编写正确的有效属性?
      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 2011-08-15
      • 1970-01-01
      • 2011-04-10
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多