为一致的UI重新加载WPF窗口?

时间:2014-03-18 14:41:53

标签: c# wpf

我是Asp.Net的一名经验丰富的程序员,如果屏幕上的数据绑定发生了变化,我可以重新加载网页。

在WPF应用程序中: MainWindow我在combox中显示了记录。用户点击 Add New ,我打开一个新的WPF窗口,将一个元组添加到数据库并返回MainWindow。

但MainPage上的数据绑定已过时。

  

我应该手动重新绑定MainWindow控件的数据吗?

     

WPF中有没有办法重新绑定页面上的所有控件?

2 个答案:

答案 0 :(得分:1)

正确的绑定应该为您解决这些问题。什么都不应该重新加载。 主窗口

 ObservableCollection<SomeClass> _mainscreenlist = new ObservableCollection<SomeClass>();
 // populate _mainscreenlist with your objects

 void OpenNewWindow() {
  var window = new YourOtherWindow(_mainscreenlist);
  window.Show();
 }

YourOtherWindow

private ObservableCollection<SomeClass> _passedlist;
// 
public YourOtherWindow(ObservableCollection<SomeClass> passedlist) {
 _passedlist = passedlist;
}

private void YourAddMethod() {
    // sadly this doesnt work so will with tuples
    // you will need SomeClass to be a class you create an instance of
    var x = new SomeClass();
    // set data on x as appropiate

    // this triggers wpf to update the mainwindow list, without reloading the window
    _passedlist.add(x);
}

Xaruth提到INotifyPropertyChanged,它有一个很好的例子INotifyPropertyChanged

您的SomeClass应该实现INotifyPropertyChanged,以便稍后如果您的某个项目发生更改,绑定将更新屏幕上的更改。

答案 1 :(得分:0)

如果您没有正确的绑定设置,那么您可能需要在向集合添加内容后手动刷新组合框中的项目。

combobox.Items.Refresh()

您应该查看上面提到的MVVM和INotifyPropertyChanged。

相关问题