如何更新ListBox项目中的TextBlock文本

时间:2016-03-19 20:47:22

标签: c# wpf xaml mvvm listbox

所以我有一个来自WinForm项目的简单UDP聊天应用程序,我希望看起来更好一点,所以我在WPF中重新制作它。当我意识到我可以轻松地在ListItem中放入2个或更多TextBlocks时,我想显示每个聊天的最后一条消息,如下所示:

Last message...

但是我不知道如何编辑那些TextBlocks :(我的文学刚开始使用WPF,所以我敢打赌我只是复制了一下,但正因为如此,我甚至不知道如何搜索这个问题。

这是自定义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>

1 个答案:

答案 0 :(得分:2)

这是显示主体的简化模型,但是如果您要创建实现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");
        }
    }
}

然后在你的窗口中

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";
    }
}

然后您不再对myList控件进行操作,而是对_myItems列表及其项目进行操作。如果您在集合中添加/删除项目,它将在UI中添加/删除项目,如果您更改项目的属性,它将更新UI中的绑定属性