0

我有以下项目模板(我试图剥离所有不相关的东西):

<s:SurfaceWindow.Resources>
    <ResourceDictionary>
        <Style TargetType="{x:Type s:SurfaceListBox}">
            <Setter Property="ItemTemplate">
                <DataTemplate DataType="{x:Type local:myClass}"> //my own class
                    <s:SurfaceButton>
                        <TextBlock Text="{Binding name}">        //name is a string in my own class
//and close all the tags

这个想法是我的列表框将包含显示一些单词的按钮。

再往下,我有一个SurfaceListBox使用上述资源。我通过以下方式添加一个项目:

myListBox.Items.Add(new myClass("My Name"));

它会很好地向列表框添加一个按钮,该按钮显示“我的名字”。

现在我需要将“我的名字”更改为另一个字符串。

我如何访问它TextBlock

我试过谷歌搜索,但访问DataTemplate它们中的项目的解决方案都需要VisualTreeHelper.GetChildrenCountvia FindVisualChild,它为我返回 0 所以它不起作用。

4

1 回答 1

2

实现这一点的简单而正确的方法是使用DataBinding.

更新 TextBlock XAML,以便 TextBlock 可以在后端name属性更改时自行更新

<TextBlock Text="{Binding name, UpdateSourceTrigger=PropertyChanged}">

在您myClass实施INotifyPropertyChanged。然后每当您希望更改文本呼叫PropertyChanged事件时。

public name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
        PropertyChanged("name");
    }
}
于 2013-07-25T09:49:09.680 回答