将NameValueCollection绑定到TextBlock

时间:2013-02-26 03:58:43

标签: wpf data-binding

我有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时我做错了什么。

请建议我。

1 个答案:

答案 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]);
}

否则你只是迭代一个空集合。