ListBox.ItemContainerGenerator.ContainerFromIndex返回null

时间:2012-09-19 17:03:19

标签: c# silverlight windows-phone-7 data-binding listbox

我在Pivot部分有一个dataBinding ListBox。

在另一个Pivot部分,我有一个表单来为ListBox创建新项目。

当我向ListBox添加一个新项目时,我需要访问新的ListBoxItem以查找TextBox控件并修改Text值,但是

ListBoxItem lbItem = allItemsListBox.ItemContainerGenerator.ContainerFromIndex(itemIndex) as ListBoxItem;

始终返回null。

问题似乎是ListBox不可见,因此新的ListBoxItem是虚拟的。

我该如何解决?

感谢。

1 个答案:

答案 0 :(得分:1)

为什么不使用DataTemplates进行数据绑定而不是直接尝试修改控件?

例如:

代码:

// Data binding class
public class Data
{
    // Implement INofifyPropertyChanged
    public string Text { get; set; }
}

// Code to bind it to Pivot

ObservableCollection<Data> list = new ObservableCollection<Data>();
// populate list
Pivot1.ItemsSource = list;

XAML:

<Pivot Name="Pivot1">
    <Pivot.ItemTemplate>
        <DataTemplate>
            <TextBlock Text={Binding Text}" />
        </DataTemplate>
    </Pivot.ItemTemplate>
</Pivot>

现在,要更改特定TextBlock的Text,您需要做的就是从列表中将相关Data对象的值更改为它。