Как я могу обновить привязку WPF немедленно - PullRequest
3 голосов
/ 19 июля 2010

Скажите, у меня есть следующий код:

ContentControl c = new ContentControl();
c.SetBinding (ContentControl.Content, new Binding());
c.DataContext = "Test";
object test = c.Content;

В этот момент c.Content вернет ноль.

Есть ли способ принудительно оценить привязку, чтобы c.Content возвращал "Test"?

1 Ответ

6 голосов
/ 19 июля 2010

Только одно сообщение может выполняться одновременно в потоке пользовательского интерфейса, где и выполняется этот код.Привязка данных происходит с определенным приоритетом в отдельных сообщениях, поэтому вам нужно убедиться, что этот код:

object test = c.Content;

выполняется после того, как эти сообщения о привязке данных будут выполнены.Это можно сделать, поставив в очередь отдельное сообщение с тем же уровнем приоритета (или ниже), что и для привязки данных:

var c = new ContentControl();
c.SetBinding(ContentControl.ContentProperty, new Binding());
c.DataContext = "Test";

// this will execute after all other messages of higher priority have executed, and after already queued messages of the same priority have been executed
Dispatcher.BeginInvoke((ThreadStart)delegate
{
    object test = c.Content;
}, System.Windows.Threading.DispatcherPriority.DataBind);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...