Есть Textbox, на который привязано некоторое значение:
<TextBox Text="{Binding LastUpdateTimeString, UpdateSourceTrigger=PropertyChanged}" />
Для свойства LastUpdateTimeString реализован INotifyPropertyChanged:
string lastUpdateTimeString;
public string LastUpdateTimeString
{
get { return lastUpdateTimeString; }
set { lastUpdateTimeString = value; Console.WriteLine("updated on " + lastUpdateTimeString); OnPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
Свойство обновляется из другого потока каждую секунду:
void devicePollingThread_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
List<ControlParameter> controlParametersLocalList = new List<ControlParameter>(ParameterList);
foreach(ControlParameter controlParameter in controlParametersLocalList)
controlParameter.LastUpdateTimeString= DateTime.Now.ToLongTimeString();
Thread.Sleep(1000);
}
}
При работе приложения, указанное поле обновляется каждую секунду, если есть какие-то действия от пользователя - водить мышкой по разным элементам, перетаскивать окно по рабочему столу. Если оставить мышку в покое и ничего не делать, то TextBox перестает обновляться. Выводом в консоль проверял, что фактически свойство меняется каждую секунду, но не происходит обновления именно самого Textbox.
В чем может быть причина?
LastUpdateTimeString– tym32167 Oct 06 '18 at 16:08{Binding Path=LastUpdateTimeString}попробуйте так, и уберитеConsole.WriteLine("updated on...в OnPropertyChanged("LastUpdateTimeString") надо вставить имя меняемой переменной. – NewView Oct 06 '18 at 16:50