UWP Binding. Что-то неправильно - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в C # и UWP. После многих дней чтения официальных доков Microsoft и переполнения стека я все еще не могу понять, что я делаю не так.

Вот очень простое тестовое приложение.

Я пытаюсь изменить фон сетки при клике. При запуске приложения фон сетки равен bg-1.jpg , как и ожидалось. После нажатия значение свойства PicturePath изменилось, но фон сетки не изменился. Чего мне не хватает?

Вот простая страница xaml

 <Page
    x:Class="Test.Views.StartPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid PointerPressed="Grid_PointerPressed">
        <Grid.Background>
            <ImageBrush ImageSource="{Binding PicturePath, Mode=OneWay}" />
        </Grid.Background>
    </Grid>
  </Page>

Код позади

public sealed partial class StartPage : Page
    {
        public StartPage()
        {
            this.InitializeComponent();
            DataContext = new {
                TestBackgroundClass.getInstance().PicturePath,
            };
        }

        private void Grid_PointerPressed(object sender, PointerRoutedEventArgs e)
        {
            TestBackgroundClass.getInstance().PicturePath = "ms-appx:///Assets/bg-2.jpg";
        }
    }

и класс Singleton

public class TestBackgroundClass : INotifyPropertyChanged
    {
        private static TestBackgroundClass instance;

        private string _picturePath { get; set; }

        public string PicturePath
            {
             get
               {
                return _picturePath;
               }
             set
               { 
                _picturePath = value;
                NotifyPropertyChanged();
               }
             }

        public TestBackgroundClass()
        {
            _picturePath = "ms-appx:///Assets/bg-1.jpg"
        }

        public static TestBackgroundClass getInstance()
        {
            if (instance == null) instance = new TestBackgroundClass();
            return instance;
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...