我搜索了几个小时但仍然不知道为什么当我的数据库发生更改时,为什么它没有立即反映在我的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,但是当我更改数据库中的数据时,在重新初始化绑定之前不会进行更改。
答案 0 :(得分:0)
WPF绑定将UI
绑定到ViewModel
。 model
(数据库或其他数据源)中的更改不会自动通知ViewModel。如果ViewModel不知道更改,则无法通过绑定更新UI。
如果您需要对模型中的更改做出反应,则需要找到一种方法来通知您的viewmodel这些更改。
答案 1 :(得分:0)
正如其他人所建议的那样,如果模型(数据库)更新,则需要通知viewmodel。
你会推荐一种方法来不断刷新窗口来显示 更新
一个简单的解决方案可能是在模型中使用Updated
事件(获取/设置数据库),然后您的viewmodel将为此事件附加处理程序。在收到任何更新后,ViewModel将重新初始化自身,这将反映在UI中。
如果您的设计不支持在更新数据库时更新模型。那真的是更大的设计问题。 例如,如何更新数据库?你在使用任何ORM吗?...