【发布时间】:2021-02-27 18:54:20
【问题描述】:
我想在 WPF 中将我的控件与我的视图模型绑定,并在我的数据库更新时自动更新数据控件。
我实现了一个具有一些List<myClass> 属性的视图模型,并从将保存在这些属性中的数据库接收数据。然后我将我的控件源绑定到这些属性。没关系,但是当我从数据库中获取新数据并将其保存在这些属性中时,控件数据不会更新。
如何以编程方式修复它?
这是我的代码:
public partial class MainWindow : Window
{
ListOfPerson personList1 = new ListOfPerson();
ListOfPerson personList2 = new ListOfPerson();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
personList1.People.Add(new Person { PersonName = "test1" });
personList2.People.Add(new Person { PersonName = "test2" });
dg.AutoGenerateColumns = false;
PropertyPath prop = new PropertyPath("PersonName");
Binding bind = new Binding();
bind.Mode = BindingMode.TwoWay;
bind.Path = prop;
dg.Columns.Add(new DataGridTextColumn { Header = "Name", Binding = bind });
dg.ItemsSource = personList1.People;
}
public void Refresh()
{
personList1.People = personList2.People;
}
private void btn_Refresh_Click(object sender, RoutedEventArgs e)
{
Refresh();
}
}
public class Person : INotifyPropertyChanged
{
private string name;
public Person()
{
}
public Person(string value)
{
this.name = value;
}
public string PersonName
{
get { return name; }
set
{
name = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
public class ListOfPerson : INotifyPropertyChanged
{
private List<Person> people = new List<Person>();
public List<Person> People
{
get
{
return people;
}
set
{
people = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
【问题讨论】:
-
如果您打算在将元素分配给 ListOfPerson 的 People 属性后将元素添加到
List<Person>,您应该使用 ObservableCollection 而不是 List。 -
坦克。但是我使用 Observable Collection,它也有这个问题。
标签: c# wpf binding code-behind