Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存后立即更新列表框集合_C#_.net_Wpf - Fatal编程技术网

C# 保存后立即更新列表框集合

C# 保存后立即更新列表框集合,c#,.net,wpf,C#,.net,Wpf,我有主窗口和用户控制数据。两者都使用自己的viewmodel表示 MainWindowViewModel和AddEditViewModel 在左侧,我有一个包含数据项列表的列表框,在右侧,我有一个AddEditView,它显示在列表框上选择的数据详细信息。在AddEdit上,我有保存按钮,用于保存文本框中的数据 在引擎盖下,一切正常,数据被正确地保存在数据库中,但数据细节的更改不会立即可见,更改在下一个应用程序中可见。执行 我知道INotifyPropertyChanged,我首先在我的list

我有主窗口和用户控制数据。两者都使用自己的viewmodel表示 MainWindowViewModel和AddEditViewModel

在左侧,我有一个包含数据项列表的列表框,在右侧,我有一个AddEditView,它显示在列表框上选择的数据详细信息。在AddEdit上,我有保存按钮,用于保存文本框中的数据

在引擎盖下,一切正常,数据被正确地保存在数据库中,但数据细节的更改不会立即可见,更改在下一个应用程序中可见。执行

我知道INotifyPropertyChanged,我首先在我的listbox数据收集上实现了它。这是密码

MainWindowViewModel

public ObservableCollection<Book> Books
{
    get { return books; }
    set {
          books = value;
          OnPropertyChanged("Books");
        }
}
 <ListBox Name="listBoxData" 
          DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" 
          ItemTemplate="{DynamicResource BookTemplate}"                              
          ItemsSource="{Binding Books}" 
          SelectedItem="{Binding SelectedBook, Mode=TwoWay}">
同样,如何在保存操作后立即更新列表框项

更新 我已将UpdateSourceRigger添加到PropertyChanged

 <ListBox Name="listBoxData" 
              DataContext="{Binding Source={StaticResource MainWindowViewModelDataSource}}" 
              ItemTemplate="{DynamicResource BookTemplate}"                              
              ItemsSource="{Binding Books, UpdateSourceTrigger=PropertyChanged}" 
              SelectedItem="{Binding SelectedBook, Mode=TwoWay}">


但这不会改变,listbox在保存数据后保持不变。

如果要在编辑
AddEditData
控件中的字段时更新
ListBoxItem
的属性,然后,您还需要在
书籍
集合中的项目类上实现
INotifyPropertyChanged
接口

如果希望它们仅在保存后更新,则需要将
UpdateSourceTrigger=Explicit
添加到
AddEditData
控件中的所有
绑定中,并在保存后手动更新它们。。。这有点麻烦,因为您需要依次访问每个
绑定
,以更新值:

BindingExpression bindingExpression = 
    someTextBox.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateSource();

或者,如果将
UpdateSourceTrigger=PropertyChanged
添加到所有
绑定中,则项目中的字段将在编辑后立即更新。

如何初始化
AddEditViewModel
,如果保存,您修改了初始的
Book
对象,并且
Book
类实现了
INotifyPropertyChanged
更改应该立即可见。感谢您的时间,我已经更新了问题。请查收。我已经用updatesourcetrigger更新了listbox,但问题仍然存在。您是否实现了
INotifyPropertyChanged
接口?Books集合的OnPropertyChanged(“Books”);我也需要在Book domain类上实现吗?正如我回答的第一行所说,如果您想在编辑
AddEditData
控件中的字段时更新
ListBoxItem
的属性,那么需要这样做。
BindingExpression bindingExpression = 
    someTextBox.GetBindingExpression(TextBox.TextProperty);
bindingExpression.UpdateSource();