[英]Why is my Binding not updating when changes are made to database?
我已经搜索了几个小时,但仍然不知道为什么在对数据库进行更改时,为什么它没有立即反映在ListBox中的TextBlock项上。
这是我的课:
class Event : INotifyPropertyChanged
{
public string Name { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public string CustomerName
{
get
{
return this.Name;
}
set
{
if (value != this.Name)
{
this.Name = value;
NotifyPropertyChanged("CustomerName");
}
}
}
private void NotifyPropertyChanged(String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
这是我的xaml
<ListBox x:Name="lb_events" ItemTemplate="{DynamicResource EventsTemplate}"...
<DataTemplate x:Key="EventsTemplate"...<StackPanel><TextBlock Text="{Binding CustomerName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
TextBlock显示分配的Event.Name,但是当我更改数据库中的数据时,直到重新初始化绑定才进行更改。
WPF绑定将UI
绑定到ViewModel
。 model
(数据库或其他数据源)中的更改将不会自动通知ViewModel。 而且,如果ViewModel不知道更改,则无法通过绑定更新UI。
如果您需要对模型中的更改做出反应,则需要找到一种方法将这些更改通知您的视图模型。
正如其他人所建议的那样,如果模型(数据库)更新,则需要通知viewmodel。
您是否会推荐一种方法来不断刷新窗口以显示更新?
一个简单的解决方案可能是在模型(获取/设置数据库)中具有Updated
事件,然后您的viewmodel将处理程序附加到该事件。 收到任何更新后,ViewModel将重新初始化自身,这将反映在UI中。
如果您的设计不支持在更新数据库时更新模型。 那么确实是更大的设计问题。 例如,如何更新数据库? 您在使用任何ORM吗?...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.