0

我有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>    

主窗口

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

请给我建议。

4

1 回答 1

1

好的几件事,一个你可能想要改变你的 DataTemplate 因为你直接在你的文本块上覆盖一个文本框,对于我的测试,我只是把它改成了一个堆栈面板:

<StackPanel>
    <TextBlock Text="{Binding}"/>
    <TextBox Name="CValue"/>
</StackPanel>

另请注意,我更改为 simpleText="{Binding}"因为 NameValueCollection 中的项目只是字符串并且没有 value 属性。

也不确定这是否只是另一个错字,但这是:

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

否则,您只是在遍历一个空集合。

于 2013-02-26T04:14:35.503 回答