INotifyPropertyChanged问题
-
连接数据库TextBlock显示某一字段值。
public class Product:INotifyPropertyChanged 。。。。。。。。
private void button1_Click(object sender, RoutedEventArgs e)
{ ObservableCollection<Product> products = new ObservableCollection<Product>();。。。。。。。
this.DataContext = products;
}<TextBlock Text="{Binding Path=ModelNumber}" />
问题?如果数据库中字段值更新了,TextBlock如何同步更新???(数据库更新,UI控件同步更新)
-
这个问题我经常在英文论坛看见,首先要理解他,你先要明白,UI和他绑定的数据模型和数据库(Model) 是分离的三个层面的东西。 我们INotifyPropertyChanged实现的是数据模型到绑定UI的一个通知功能,然后让UI绑定能够去拿到更新后的数据模型的新值。
但是,数据库和数据模型之间是一个单向的关系,都是数据模型去查询去更新数据库,数据库并不会主动地更新和通知数据模型,这个是非常明确的。
所以你的要求的实现方法通常有几种:
1. 通过定时地查询数据库,来更新数据模型。 一旦数据库更新了,在一个查询周期后,查询到了新的值,数据模型更新就可以同时通知UI去更新UI。
2. 通过一些大型数据本身带的通知功能去反向通知应用程序去查询更新的值,不过我目前了解SQL Server 要通过 Sync Framework 可以实现:http://msdn.microsoft.com/en-us/sync/bb736753。 (这里有个例子,通过Sync Framework 同步WCF来提供数http://code.msdn.microsoft.com/windowsdesktop/Database-SyncSQL-Server-e97d1208据:)
3. 通过 FileSystemWatcher 类去监视本地文件系统中数据文件或者日志有更新操作,一旦有操作,重新查询数据库来更新数据。 这个方案我有个简单的例子,是以XML为数据源,我们在文件系统中更改XML文件中的数据,你已经打开的WPF程序就会立刻更新UI到最新的值,使用的就是 FileSystemWatcher。 这里下载这个例子:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2011/20110329%5E_FileSystemNotifyWPFXMLBinding.zip 这个例子出自这个中文贴:http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/63bc1d48-3ae1-43f7-bd6c-52c0cb522381/
附上一些我以前回答过的一样的帖子:
- http://social.msdn.microsoft.com/Forums/en/wpf/thread/f00a7987-00f3-4675-a6db-a168627350d6
- http://social.msdn.microsoft.com/Forums/en/wpf/thread/aec948b8-d549-4733-a8a2-d2f995345ad7
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-