我在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();
}
}
};
当我输入时,它会对我产生一些语法错误;
有人能告诉我,如何正确地写出来?
答案 0 :(得分:3)
您无法在object initializer语法中使用代码。为什么不简单地这样做:
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;
答案 1 :(得分:2)
MBen和Habib已经回答了for for失败的原因,因为你不能在对象初始化器中进行循环并提供了循环替代方案。
或者,您可以使用linq执行初始化。
this.DataContext=dsTmp.Tables[0].Rows.Select(
x=>new DataTemplate {
lblText = "Count: ",
txtBoxContent=x[0].ToString()
}).ToArray();
答案 2 :(得分: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;
答案 3 :(得分:0)
我不知道你想要达到什么目标,但你是否曾尝试使用viewmodel第一种方法进行mvvm?
创建一个viewmodel类,例如MyData有2个公共属性MyText,MyContent。创建这些对象的集合并从数据库中填充它。
至少你需要一个itemcontrol,其中itemssource绑定设置为你的集合,而你的MyData对象需要一个datatemplate。
<DataTemplate DataType="{x:Type local:MyData}">
<view:MyDataViewControl />
</DataTemplate>
现在,您可以在itemscontrol中看到所有动态对象。