【发布时间】:2015-12-27 02:57:01
【问题描述】:
以下是我遇到的问题的精简版。这是一个相当普遍的问题,但我正在努力寻找解决方案。
我有一个实例化的类,我已经绑定到我的主窗口上的一个项目。此类包含用于更新值的 DispatcherTimer。在给出的示例中,它每秒将该值增加 1。
我希望表单上的绑定项通过相应地更新其值来反映此更改,但它永远不会更新。
通过阅读 StackOverflow 上对类似问题的其他回复,我感觉这是由于主 UI 线程的性质与导致增量的线程分开运行。
虽然我试图让这个绑定随着我的 DispatcherTimer 的每次调用而更新,但我却把头撞到了墙上。
以下是我想要每秒更新的表单元素:
<TextBox Text="{Binding val}" Width="100"/>
接下来,这是包含计时器和我的应用程序配置的类的实例化:
BasicTimer basictimer;
public MainWindow()
{
InitializeComponent();
basictimer = new BasicTimer();
DataContext = basictimer;
}
最后,这是我创建的类。创建时,它配置一个计时器,用于每秒更新一个值。每次更新此值时,我希望主 UI 会收到更改通知并相应更新。但是,这条消息似乎没有通过。
类 BasicTimer:INotifyPropertyChanged { DispatcherTimer _timer; uint _val = 10; 公共单位价值 { 得到 { 返回_val; } 放 { 如果(_val!=值) { _val = 价值; OnPropertyChanged("值"); } } } 公共基本定时器() { _timer = new DispatcherTimer(); _timer.Tick += new EventHandler(TimerTick); _timer.Interval = new TimeSpan(0, 0, 1); _timer.Start(); } private void TimerTick(对象发送者,EventArgs e) { 验证++; Console.WriteLine(val); } 公共事件 PropertyChangedEventHandler PropertyChanged; 受保护的无效 OnPropertyChanged(字符串 PropertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); } }我想我已经设法避免了忘记 INotifyPropertChanged 的常见陷阱,并且来自其他模型的其他绑定值工作得很好。只是这个属性正在通过我遇到问题的线程进行更新。我也尝试使用简单的 Timer 创建类似的计时器,但我遇到了同样的问题。
任何想法将不胜感激,谢谢!
【问题讨论】:
标签: c# wpf data-binding