1

我在 C#,WPF 中有以下代码:

base.DataContext = new DataTemplate[]
                {
                    new DataTemplate
                    {
                        lblText = "First",
                        txtBoxContent = ""
                    },

                    new DataTemplate
                    {
                        lblText = "Second",
                        txtBoxContent = "Something"
                    }
                };

但我需要从数据库中动态填充 DataContext。我的想法是这样的:

base.DataContext = new DataTemplate[]
        {
            for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
            {
                new DataTemplate
                {
                    lblText = "Count: ",
                    txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
                }
            }
        };

当我输入这个时,它会对我大喊一些语法错误;

谁能告诉我,如何正确写?

4

4 回答 4

3

您不能在对象初始值设定项语法中包含代码。为什么不简单地这样做:

   var list = new DataTemplate[dsTmp.Tables[0].Rows.Count];
   for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
    {
        var item = new DataTemplate
        {
            lblText = "Count: ",
            txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
        };
        list[i] = item;
    }

    this.DataContext = list;
于 2012-07-16T09:01:13.273 回答
2

MBen 和 Habib 已经回答了 for 失败的原因,因为您不能在对象初始化程序中执行循环,并且提供了循环替代方案。

或者,您可以使用 linq 执行初始化。

this.DataContext=dsTmp.Tables[0].Rows.Select(
  x=>new DataTemplate { 
                        lblText = "Count: ",
                        txtBoxContent=x[0].ToString()
                      }).ToArray(); 
于 2012-07-16T09:12:58.517 回答
1

缺少的错误;有点误导。实际问题是您正在尝试使用循环创建 DataTemplate 数组,您不能在数组/对象初始化中使用循环。试试下面的。

DataTemplate[] tempDataTemplate = new DataTemplate[ds.Temp.Tables[0].Rows.Count]();
for(int i = 0; i< dsTmp.Tables[0].Rows.Count; i++)
            {

             tempDataTemplate[i] =   new DataTemplate
                                             {
                                             lblText = "Count: ",
                                             txtBoxContent = dsTmp.Tables[0].Rows[i][0].ToString();
                                             };
            }

base.DataContext = tempDataTemplate;
于 2012-07-16T09:01:21.567 回答
0

我不知道你想实现什么,但你有没有尝试过使用 viewmodel first 方法的 mvvm?

创建一个视图模型类,例如具有 2 个公共属性 MyText、MyContent 的 MyData。创建这些对象的集合并从您的数据库中填充它。

至少您需要一个将 itemssource 绑定设置为您的集合的 itemscontrol 和一个用于 MyData 对象的数据模板。

<DataTemplate DataType="{x:Type local:MyData}">
  <view:MyDataViewControl />
</DataTemplate>

现在您可以在 itemscontrol 中看到所有动态对象。

于 2012-07-16T09:06:24.660 回答