简体   繁体   English

如何更新ListBox项内的TextBlock文本

[英]How to update TextBlock text inside of ListBox item

So I have a simple UDP chat app from a WinForm project, which I wanted to look a little bit better, so I am re-making it in WPF. 因此,我有一个来自WinForm项目的简单UDP聊天应用程序,我希望它看起来更好一些,因此我将在WPF中对其进行重新制作。 As I realized I can easily put 2 or more TextBlocks inside of a ListItem, I wanted to display the last message of each chat, like so: 当我意识到可以轻松地在ListItem中放置2个或更多TextBlocks时,我想显示每次聊天的最后一条消息,如下所示:

最后一条消息...

But I have no Idea on how to edit those TextBlocks :( I literary just started with WPF, so I bet I just made a duplicate, but because of that, I don't even know how to search for this issue. 但是我不知道如何编辑这些TextBlocks :(我的文学只是从WPF开始的,所以我敢打赌我只是做了一个重复,但是正因为如此,我什至不知道如何搜索这个问题。

Here is the custom ListBox: 这是自定义ListBox:

<ListBox x:Name="myList" HorizontalAlignment="Left" Width="264" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Disabled" BorderThickness="0,1,1,0" MouseLeftButtonUp="myList_MouseLeftButtonUp" Margin="0,25,0,0">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="LightGray" BorderThickness="0,0,0,1" Width="250">
                    <DockPanel Margin="0,7">
                        <Ellipse Name="ellipse" Margin="5"  DockPanel.Dock="Left" Style="{DynamicResource elstyle}">
                        </Ellipse>
                        <TextBlock Text="{Binding Name}" DockPanel.Dock="Top" Margin="0,0,0,7" FontWeight="Bold" MaxWidth="250"></TextBlock>
                        <TextBlock Text="{Binding ID}" DockPanel.Dock="Top" Visibility="Hidden" FontSize="1.333"></TextBlock>
                        <TextBlock x:Name="last_message" Text="{Binding LastMessage}" DockPanel.Dock="Bottom" MaxWidth="250"></TextBlock>
                    </DockPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

This is simplified model to show the principal but if you would create view model class that implement INotifyPropertyChanged interface to hold your item data 这是简化的模型,用于显示主体,但是如果要创建实现INotifyPropertyChanged接口的视图模型类来保存项目数据

public class MyItem : INotifyPropertyChanged
{
    private string _name;

    private string _id;

    private string _lastMessage;

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        var handler = this.PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged("Name");
        }
    }

    public string ID
    {
        get { return _id; }
        set
        {
            _id = value;
            OnPropertyChanged("ID");
        }
    }

    public string LastMessage
    {
        get { return _lastMessage; }
        set
        {
            _lastMessage = value;
            OnPropertyChanged("LastMessage");
        }
    }
}

and then in your window 然后在你的窗口

public partial class MainWindow : Window
{
    private readonly ObservableCollection<MyItem> _myItems = new ObservableCollection<MyItem>();

    public MainWindow()
    {
        InitializeComponent();
        myList.ItemsSource = _myItems;
        _myItems.Add(new MyItem { Name = "name", ID = "id", LastMessage = "last message" });
        _myItems[0].LastMessage = "new message";
    }
}

and then you don't operate on myList control anymore but on _myItems list and its items. 然后您将不再对myList控件进行操作,而对_myItems列表及其项目进行操作。 If you add/remove item in the collection it will add/remove item in the UI, if you change property of an item it will update bound property in the UI 如果在集合中添加/删除项目,它将在UI中添加/删除项目;如果更改项目的属性,则将在UI中更新绑定属性

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM