WPF - обновленный обязательный вопрос во время выполнения - PullRequest
3 голосов
/ 14 августа 2010

Я довольно новичок в C # и совершенно новичок в отношении WPF. Вероятно, это очень простой вопрос и кусок пирога для профессионалов. Пожалуйста, потерпите меня.

Мне нужно отобразить динамический текстовый блок с текстом, измененным во время выполнения, без дополнительных триггеров, таких как нажатия кнопок и т. Д. По какой-то причине (мое недостаточное понимание концепции очевидно) текстовый блок остается пустым.

Xaml настолько прост, насколько это возможно:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <TextBlock Text="{Binding Path=Name}"/>
    </Grid>
</Window>

И код, стоящий за ним, также упростился:

using System.ComponentModel;
using System.Threading;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Client client = new Client();
            client.Name = "Michael";
            Thread.Sleep(1000);
            client.Name = "Johnson";
        }
    }


    public class Client : INotifyPropertyChanged
    {
        private string name = "The name is:";
        public event PropertyChangedEventHandler PropertyChanged;

        public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                if (this.name == value)
                    return;

                this.name = value;
                this.OnPropertyChanged(new PropertyChangedEventArgs("Name"));
            }
        }

        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, e);
        }
    }
}

Заранее спасибо,

Ceres

1 Ответ

4 голосов
/ 15 августа 2010

Чтобы привязка работала, вам нужно установить в DataContext окна объект, с которым вы хотите связать, в данном случае объект клиента.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    Client client = new Client();

    // Set client as the DataContext.
    DataContext = client;

    client.Name = "Michael";
    Thread.Sleep(1000);
    client.Name = "Johnson";
}

Это должно привести к тому, что TextBoxобновление успешно.

Просто чтобы указать, что использование Thread.Sleep () в загруженном событии приводит к зависанию программы на секунду при запуске, лучше использовать WPF DispatcherTimer создать задержку в 1 секунду.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...