UI not updating despite ObservableCollection (UWP, XAML)
<p>I would greatly appreciate some help with this binding issue I'm having. Basically I have a list view showing some information about Files. In the list view item itself, there's some text and also a button.</p>

<p>When this button is clicked I want to disable that button.</p>

<p>Currently I've set up an ObservableCollection - however even though the button click is being registered, the UI doesn't update. If I go to a different screen and return, <em>then</em> the UI updates. So it's not instantaneous. </p>

<p>I think there is some problem with the way RaisePropertyChanged() is working. I know from reading other SO articles that property changes in the object are harder to pick up than say, removing an item or adding an item to the ListView.</p>

<p>I'm completely stuck, any help would be most appreciated. Thanks.</p>

<p>Xaml:</p>

<pre><code>&lt;ListView RelativePanel.Below="heading" ItemsSource="{Binding Pages}" ReorderMode="Enabled" CanReorderItems="True" AllowDrop="True" Margin="0,10" SelectedItem="{Binding Path=SelectedFile,Mode=TwoWay}" &gt;
    &lt;ListView.ItemTemplate&gt;
        &lt;DataTemplate x:DataType="model:File"&gt;
            &lt;Grid Padding="10"&gt;
                &lt;Grid.RowDefinitions&gt;
                    &lt;RowDefinition Height="Auto"/&gt;
                    &lt;RowDefinition Height="Auto"/&gt;
                &lt;/Grid.RowDefinitions&gt;
                &lt;Grid.ColumnDefinitions&gt;
                    &lt;ColumnDefinition Width="250"/&gt;
                    &lt;ColumnDefinition Width="Auto"/&gt;
                &lt;/Grid.ColumnDefinitions&gt;
                &lt;TextBlock Text="{x:Bind Path= Name, Mode=TwoWay}" FontWeight="Bold" Padding="0,5"  /&gt;
                &lt;TextBlock Text ="{x:Bind Path}" Grid.Row="1" TextWrapping="Wrap" Padding="10,0,0,0" Foreground="DarkGray" Opacity="0.8" /&gt;
                &lt;Button Content="X" Grid.Column="1" Grid.RowSpan="2" Command="{x:Bind EnableCommand}" IsEnabled="{x:Bind Path=IsEnabled, Mode=OneWay}" /&gt;
            &lt;/Grid&gt;
        &lt;/DataTemplate&gt;
    &lt;/ListView.ItemTemplate&gt;
&lt;/ListView&gt;
</code></pre>

<p>File.cs:</p>

<pre><code>public class File : ViewModelBase
{
    public string Name { get; set; }
    public string FileName { get; set; }
    public string Path { get; set; }
    public string Contents { get; set; }

    private Boolean isEnabled = true;
    public Boolean IsEnabled {
        get { return isEnabled; }
        private set {
            isEnabled = value;
            RaisePropertyChanged("IsChecked");
        }
    }

    private ICommand enableCommand;
    public ICommand EnableCommand
    {
        get
        {
            if(enableCommand == null)
            {
                enableCommand = new RelayCommand(() =&gt; {
                    isEnabled = false;
                    Name += "Disabled";
                    RaisePropertyChanged();
                });
            }

            return enableCommand;
        }
    }
}
</code></pre>

<p>Viewmodel:</p>

<pre><code>public class MyPageViewModel : BaseViewModel
{
    private ObservableCollection&lt;File&gt; pages;

    public ObservableCollection&lt;File&gt; Pages
    {
        get { return pages; }
        set
        {
            pages = value;
            RaisePropertyChanged();
        }
    }

    private File selectedFile = new File();
    public File SelectedFile
    {
        get { return selectedFile; }
        set
        {
            Set(ref selectedFile, value);
        }
    }

    public MyPageViewModel()
    {
        if (ApplicationData.FileList != null)
        {
            Pages = new ObservableCollection&lt;File&gt;(ApplicationData.FileList);
        }

        else
        {
            Pages = new ObservableCollection&lt;File&gt;();
        }
    }
</code></pre>