Assigned value in viewmodel not updated when original changes
<p>I have a main window with a viewmodel containing the properties:</p>

<pre><code>class MainWindowModel : INotifyPropertyChanged
{

    ObservableCollection&lt;Currency&gt; currencyCollection;
    string lastUpdated;
    int updateInterval;
    public CurrencyDataSource DataSource { get; set; }


    public ObservableCollection&lt;Currency&gt; CurrencyCollection
    {
        get
        {
            if (currencyCollection == null)
                currencyCollection = new ObservableCollection&lt;Currency&gt;();
            return currencyCollection;
        }

        set
        {
            currencyCollection = value;
            OnPropertyChanged();
        }
    }

    public string LastUpdated
    {
        get
        {
            return lastUpdated;
        }

        set
        {
            lastUpdated = value;
            OnPropertyChanged();
        }
    }

    public int UpdateInterval
    {
        get
        {
            return updateInterval;
        }

        set
        {
            updateInterval = value;
        }
    }



    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName="")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        if (propertyName == "LastUpdated")
        {
            System.Diagnostics.Debug.WriteLine("Property changed from main " + propertyName + " " + this.LastUpdated); 
        }
    }
}
</code></pre>

<p>Now, all my databindings with this VM works perfect in WPF interface databindings. I also have secondary windows who are opened from main, which have the following VM:</p>

<pre><code>public class CurrencyTrackModel : INotifyPropertyChanged
{
    Currency currency;
    string lastUpdated;

    public Currency Currency
    {
        get
        {
            return currency;
        }

        set
        {
            currency = value;
        }
    }

    public string LastUpdated
    {
        get
        {
            return lastUpdated;
        }

        set
        {
            lastUpdated = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

        System.Diagnostics.Debug.WriteLine("Property changed from track " + propertyName + " " + this.LastUpdated);
    }
}
</code></pre>

<p>I initialize secondary windows from first as follows (I assign datacontext in constructor):</p>

<pre><code>        Currency currency = (sender as Button).DataContext as Currency;
        CurrencyTrackModel trackModel = new CurrencyTrackModel();
        trackModel.Currency = currency;
        trackModel.LastUpdated = model.LastUpdated;
        currencyTrack trackWindow = new currencyTrack(trackModel);
        trackWindow.Show();
</code></pre>

<p>When the properties of <code>Currency</code> class are updated (within main window code-behind), UI bindings in both main and secondary windows are updated perfectly. However, the property <code>LastUpdated</code> is only updated in the UI of main window. On further investigation, I found out that <code>trackModel.LastUpdated</code> does not follow <code>mainWindow.LastUpdated</code>; it is fixed on the first value assigned (unlike properties of <code>Currency</code>).</p>

<p>I tried to use <code>DateTime</code> instead of <code>string</code>, but it did not work as well. I have little clue how to search it on internet; reference and other searches usually result in function passing pages.</p>

<p>Currency class (only fields, props are standard):</p>

<pre><code>    private decimal sellValue;
    private decimal buyValue;
    private decimal prevSellValue;
    private decimal prevBuyValue;
    private string sellValueColor;
    private string buyValueColor;
    private string sellArrow;
    private string buyArrow;
</code></pre>

<p>Main window binding:</p>

<pre><code>                &lt;TextBlock Text="{Binding Path=LastUpdated,StringFormat=last Updated: {0:F}}"&gt;&lt;/TextBlock&gt;
</code></pre>

<p>Secondary window binding:</p>

<pre><code>&lt;TextBlock Text="{Binding Path=LastUpdated, StringFormat=f}"&gt;&lt;/TextBlock&gt;
</code></pre>