我有ItemsControl
使用模板来绑定数据。
<ItemsControl ItemsSource="{Binding MyCollection}" x:Name="MyCollectionControl" ItemTemplate="{DynamicResource MyCollectionTemplate}" />
MyCollection 是NameValueCollection
的类型,以下绑定不起作用。它填充了正确数量的对,但TextBlock
没有得到有界值。
模板
<DataTemplate x:Key="MyCollectionTemplate">
<Grid>
<TextBlock Text="{Binding Path=Value, Mode=OneWay}"/>
<TextBox Name="CValue"/>
</Grid>
</DataTemplate>
mainWindow
string[] dataCollection=new string[5];
....
....
Student studentObject=new Student("1",dataCollection);
this.dataContext = studentObject;
学生班级
public class Student
{
public string Id;
public NameValueCollection MyCollection {get; set;}
public Student(string id, params string[] additionalInfo)
{
Id = id;
if (additionalInfo != null)
{
MyCollection=new NameValueCollection();
foreach (string s in MyCollection)
{
string[] tokens = s.Split('|');
if (tokens.Length == 2)
MyCollection.Add(tokens[0], tokens[1]);
}
}
}
}
绑定NameValueCollection
时我做错了什么。
请建议我。
答案 0 :(得分:1)
确定一些事情,你可能想要更改你的DataTemplate,因为你将文本框直接覆盖在文本块上,对于我的测试我只是将其更改为堆栈面板:
<StackPanel>
<TextBlock Text="{Binding}"/>
<TextBox Name="CValue"/>
</StackPanel>
另请注意,我改为简单Text="{Binding}"
,因为NameValueCollection中的项目只是字符串而没有值属性。
也不确定这只是另一个错字,但是这个:
foreach (string s in MyCollection)
{
string[] tokens = s.Split('|');
if (tokens.Length == 2)
MyCollection.Add(tokens[0], tokens[1]);
}
应该说:
foreach (string s in additionalInfo)
{
string[] tokens = s.Split('|');
if (tokens.Length == 2)
MyCollection.Add(tokens[0], tokens[1]);
}
否则你只是迭代一个空集合。