Search code examples
c#xamllistviewwindows-phonewindows-phone-8.1

Update ListView items value not working Windows Phone 8.1


When i try to update value of inserted element in ListView i didn't see changes on phone, but in debug message i see changes. Here my code.

 private void chat_LayoutUpdated(object sender, object e)
    {
        foreach (Message item in chat.Items)
        {
            item.MessageTime = GetRelativeDate(item.MessageDateTime);
            Debug.WriteLine(item.MessageTime); //Display changed value(Delta computed on step before) but on phone screen value didn't change;
        }

    }

GetRelativeDate // Long function which return delta between current time and time when message was sended.

class Message // Model of chat message
{
    public string MessageText { get; set; }
    public string MessageTime { get; set; } // This value i want to change in ListView.
    public DateTime MessageDateTime { get; set; }
}

XAML

<TextBlock Grid.Column="0"
                FontSize="22"
                Text="{Binding MessageText}" />
                        <TextBlock
                Grid.Column="1"
                Grid.Row="1"
                FontSize="10"
                Text="{Binding MessageTime}" />

P/s Maybe i need something more specific for using as chat windows.

Anyway thanks guys i will really appreciate any answers or suggestions.


Solution

  • Need to Implement INofityPropertyChanged

    MSDN: inotifypropertychanged Example


    Sample from the MSDN article:

    public class DemoCustomer : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        // This method is called by the Set accessor of each property. 
        // The CallerMemberName attribute that is applied to the optional propertyName 
        // parameter causes the property name of the caller to be substituted as an argument. 
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    
        private DemoCustomer()
        {
        }
    
        private string customerNameValue = String.Empty;
        public string CustomerName
        {
            get
            {
                return this.customerNameValue;
            }
    
            set
            {
                if (value != this.customerNameValue)
                {
                    this.customerNameValue = value;
                    NotifyPropertyChanged();
                }
            }
        }
    }