为什么在对数据库进行更改时,我的Binding不会更新?

时间:2014-02-15 12:30:33

标签: c# wpf xaml inotifypropertychanged

我搜索了几个小时但仍然不知道为什么当我的数据库发生更改时,为什么它没有立即反映在我的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,但是当我更改数据库中的数据时,在重新初始化绑定之前不会进行更改。

2 个答案:

答案 0 :(得分:0)

WPF绑定将UI绑定到ViewModelmodel(数据库或其他数据源)中的更改不会自动通知ViewModel。如果ViewModel不知道更改,则无法通过绑定更新UI。

如果您需要对模型中的更改做出反应,则需要找到一种方法来通知您的viewmodel这些更改。

答案 1 :(得分:0)

正如其他人所建议的那样,如果模型(数据库)更新,则需要通知viewmodel。

  

你会推荐一种方法来不断刷新窗口来显示   更新

一个简单的解决方案可能是在模型中使用Updated事件(获取/设置数据库),然后您的viewmodel将为此事件附加处理程序。在收到任何更新后,ViewModel将重新初始化自身,这将反映在UI中。

如果您的设计不支持在更新数据库时更新模型。那真的是更大的设计问题。 例如,如何更新数据库?你在使用任何ORM吗?...