gpt4 book ai didi

.net - MVVM - 如何在运行时为 xamdatagrid 创建列?

转载 作者:行者123 更新时间:2023-12-04 12:14:17 26 4
gpt4 key购买 nike

我必须创建一个 XamDataGrid,它显示时间范围 x 到 y 的动态列数。因此,我不知道用户会选择多少年来预先创建这些列。

现在通常在 MVVM 中,您只需通过 XamDataGrid 中所需的列填充数据,后者只会自动生成它们。

显然,我不能只在运行时在我的 ViewModel 中创建属性,除非我对反射做了一些疯狂的事情。

我还能如何实现这一目标?

我应该为数据网格创建未绑定(bind)字段并通过代码填充它们吗?我同意在这个阶段我不需要双向绑定(bind),因为网格只是只读的......只是大声思考。

这种方法可以在不违反 MVVM 模式的情况下使用吗?
谢谢

最佳答案

您可以使用索引器:

在您的 View 模型中:

public MyVariableCollection RowData
{
get { return new MyVariableCollection(this); }
}

MyVariableCollection :
protected SomeRowViewModel View 模型;
public MyVariableCollection(SomeRowViewModel viewmodel)
{
this.viewModel = viewmodel;
}

public object this[string name]
{
get { return viewModel.GetRowColumnValue(name); }
}

我试图保持简短:但想法是,您有一个定义了索引器的新类,然后您可以像这样绑定(bind):
{Binding Path=SomeRowViewModelInstance.RowData["ColumnName"]}

数据网格控件上的列集合将被绑定(bind) - 您可以为每列设置一个列模板以绑定(bind)到相关列;您不需要像那样在索引器中使用文字字符串。

希望能提供一些思考——关于这条路线的任何问题,请发表评论。

编辑一个额外的想法:我使用了内容 ComponentModel命名空间以生成自定义 TypeDescriptor .它相当深入,但您可以使对象“看起来”具有附加或自定义属性。它比我在上面发布的索引器方法复杂得多,但如果你遇到困难,值得一看。

关于.net - MVVM - 如何在运行时为 xamdatagrid 创建列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3425972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com