Обновление окна WPF

637
09 января 2017, 19:57

Начал разбираться в WPF, и сразу столкнулся с такой проблемой: в коде есть переменная, которую я постоянно меняю. Она отображается в форме в Label. Но при изменении ее в коде в форме она не меняется. Как это вообще реализуется? У меня эта переменная изменяется в отдельном фоновом потоке, и нужно, чтобы на экране она тоже обновлялась.

Answer 1

Для начала, вам нужно, чтобы переменная, которую вы отображаете на экране, была частью DataContext. Например, вы кладёте её в класс, и присваиваете DataContext'у его экземпляр:

class VM
{
    public string Message { get; set; }
}
VM vm = new VM();
window.DataContext = vm;

Теперь можно привязаться к вашему свойству:

<Label Content="{Binding Message}"/>

Но это не всё. Для того, чтобы окно увидело изменения переменной, вы должны реализовать интерфейс INotifyPropertyChanged:

class VM : INotifyPropertyChanged
{
    string message;
    public string Message
    {
        get { return message; }
        set { if (message != value) { message = value; NotifyPropertyChanged(); } }
    }
    void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

Но и это ещё не всё. Теперь чтобы всё работало правильно, вам нужно устанавливать значение VM-свойства только в главном потоке. Как это делать — зависит от выбранных вами инструментальных средств. Например, вы можете использовать BeginInvoke в вашем рабочем потоке. Или выполнять вычисления в фоне при помощи техники async/await.

READ ALSO
Отображение показов на сайте АдМоб

Отображение показов на сайте АдМоб

Я запускаю тестовую рекламу, используя:

477
Как создать выпадающий список из enum&#39;а в ASP.NET MVC?

Как создать выпадающий список из enum'а в ASP.NET MVC?

Внимание! Это перевод вопроса How do you create a dropdownlist from an enum in ASPNET MVC?

752
Работа с ComboBox в WF

Работа с ComboBox в WF

Доброе время сутокИмеется ComboBox с выпадающими элементами

432
выбор в Combobox c# согласно запросу

выбор в Combobox c# согласно запросу

Добрый день, проблема у меня возникла таковаЕсть combobox в нее подгружаются данные из dataset,

417